Index: trunk/FACT++/src/tools.cc
===================================================================
--- trunk/FACT++/src/tools.cc	(revision 19118)
+++ trunk/FACT++/src/tools.cc	(revision 19119)
@@ -215,4 +215,45 @@
 }
 
+string Tools::Fractional(const double &val)
+{
+    ostringstream rc;
+    rc << setprecision(1) << fixed;
+
+    const auto abs = fabs(val);
+
+    if (abs>1)
+    {
+        rc << val << " ";
+        return rc.str();
+    }
+
+    if (abs>1e-3)
+    {
+        rc << val*1000 << " m";
+        return rc.str();
+    }
+
+    if (abs>1e-6)
+    {
+        rc << val*1000000 << " u";
+        return rc.str();
+    }
+
+    if (abs>1e-9)
+    {
+        rc << val*1000000000 << " n";
+        return rc.str();
+    }
+
+    if (abs>1e-12)
+    {
+        rc << val*1000000000000. << " p";
+        return rc.str();
+    }
+
+    rc << abs*1000000000000000. << " f";
+    return rc.str();
+}
+
 // --------------------------------------------------------------------------
 //
Index: trunk/FACT++/src/tools.h
===================================================================
--- trunk/FACT++/src/tools.h	(revision 19118)
+++ trunk/FACT++/src/tools.h	(revision 19119)
@@ -18,4 +18,5 @@
     std::string Wrap(std::string &str, size_t width=78);
     std::string Scientific(uint64_t val);
+    std::string Fractional(const double &val);
 
     std::map<std::string,std::string> Split(std::string &, bool = false);
