]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.utils/src/org/simantics/utils/format/FormattingUtil.java
Sync git svn branch with SVN repository r33303.
[simantics/platform.git] / bundles / org.simantics.utils / src / org / simantics / utils / format / FormattingUtil.java
index ae17537f02f3a9fe2ecad21183bb948a1ecee5d1..a1a525d80f19ad735bf42c72698032a6d6159208 100644 (file)
@@ -25,6 +25,8 @@ public class FormattingUtil {
 \r
     private int floatDigits;\r
     private int doubleDigits;\r
+    private double lowLimit;\r
+    private double highLimit;\r
     private DecimalFormatSymbols decimalFormatSymbols;\r
 \r
     private DecimalFormat flow;\r
@@ -38,20 +40,28 @@ public class FormattingUtil {
     public FormattingUtil(int floatDigits, int doubleDigits) {\r
         this(floatDigits, doubleDigits, Locale.getDefault());\r
     }\r
-\r
+    \r
     public FormattingUtil(int floatDigits, int doubleDigits, Locale locale) {\r
-        this.floatDigits = floatDigits;\r
+        this(floatDigits, doubleDigits, 0.01, 1e6, locale);\r
+    }\r
+\r
+    public FormattingUtil(int floatDigits, int doubleDigits, double lowLimit, double highLimit, Locale locale) {\r
+       this.floatDigits = floatDigits;\r
         this.doubleDigits = doubleDigits;\r
-        this.decimalFormatSymbols = DecimalFormatSymbols.getInstance(locale);\r
+        this.lowLimit = lowLimit;\r
+        this.highLimit = highLimit;\r
+        this.decimalFormatSymbols = DecimalFormatSymbols.getInstance(locale != null ? locale : Locale.getDefault());\r
         initFormats();\r
     }\r
 \r
     private void initFormats() {\r
         this.flow = createLowFormat(floatDigits);\r
-        this.fmiddles = createMiddleFormats(6, floatDigits);\r
+        double exp = Math.log10(highLimit);\r
+        int formatCount = Math.max(1, (int) Math.ceil(exp));\r
+        this.fmiddles = createMiddleFormats(formatCount, floatDigits);\r
         this.fhigh = createHighFormat(floatDigits);\r
         this.dlow = createLowFormat(doubleDigits);\r
-        this.dmiddles = createMiddleFormats(6, doubleDigits);\r
+        this.dmiddles = createMiddleFormats(formatCount, doubleDigits);\r
         this.dhigh = createHighFormat(doubleDigits);\r
     }\r
 \r
@@ -66,7 +76,8 @@ public class FormattingUtil {
 \r
     private DecimalFormat createHighFormat(int digitCount) {\r
         StringBuilder fmt = new StringBuilder();\r
-        fmt.append("##0.");\r
+        fmt.append("##0");\r
+        if (digitCount > 3) fmt.append(".");\r
         for (int i = 3; i < digitCount; ++i)\r
             fmt.append('#');\r
         fmt.append("E0");\r
@@ -74,8 +85,8 @@ public class FormattingUtil {
         return new DecimalFormat(fmt.toString(), decimalFormatSymbols);\r
     }\r
 \r
-    private static DecimalFormat[] createMiddleFormats(int formatCount, int digitCount) {\r
-        DecimalFormat[] middles = new DecimalFormat[6];\r
+    private DecimalFormat[] createMiddleFormats(int formatCount, int digitCount) {\r
+        DecimalFormat[] middles = new DecimalFormat[formatCount];\r
         for (int exp10 = 0; exp10 < formatCount; ++exp10) {\r
             StringBuilder fmt = new StringBuilder();\r
             int digits = digitCount;\r
@@ -83,11 +94,11 @@ public class FormattingUtil {
                 fmt.append('#');\r
             fmt.append('0');\r
             --digits;\r
-            fmt.append('.');\r
+            if (digits > 0) fmt.append('.');\r
             for (; digits > 0; --digits)\r
                 fmt.append('#');\r
             //System.out.println(fmt.toString());\r
-            middles[exp10] = new DecimalFormat(fmt.toString(), DecimalFormatSymbols.getInstance(Locale.US));\r
+            middles[exp10] = new DecimalFormat(fmt.toString(), decimalFormatSymbols);\r
         }\r
         return middles;\r
     }\r
@@ -145,16 +156,16 @@ public class FormattingUtil {
         }\r
     }\r
 \r
-    private String formatNumber(float v) {\r
+    public String formatNumber(float v) {\r
         if (Float.isInfinite(v)) {\r
             return (v == Float.POSITIVE_INFINITY) ? "\u221E" : "-\u221E";\r
         } else if (Float.isNaN(v)) {\r
             return "NaN";\r
         } else {\r
             float abs = Math.abs(v);\r
-            if (abs < 1.0f && abs >= 0.01f) {\r
+            if (abs < 1.0f && abs >= (float)lowLimit) {\r
                 return flow.format(v);\r
-            } else if (abs >= 1.0f && abs < 1e6f) {\r
+            } else if (abs >= 1.0f && abs < (float)highLimit) {\r
                 double exp = Math.log10(abs);\r
                 int expi = (int) Math.floor(exp);\r
 //                System.out.println("format(" + v + ")");\r
@@ -168,16 +179,16 @@ public class FormattingUtil {
         }\r
     }\r
 \r
-    private String formatNumber(double v) {\r
+    public String formatNumber(double v) {\r
         if (Double.isInfinite(v)) {\r
             return (v == Double.POSITIVE_INFINITY) ? "\u221E" : "-\u221E";\r
         } else if (Double.isNaN(v)) {\r
             return "NaN";\r
         } else {\r
             double abs = Math.abs(v);\r
-            if (abs < 1.0 && abs >= 0.01) {\r
+            if (abs < 1.0 && abs >= lowLimit) {\r
                 return dlow.format(v);\r
-            } else if (abs >= 1.0 && abs < 1e6) {\r
+            } else if (abs >= 1.0 && abs < highLimit) {\r
                 double exp = Math.log10(abs);\r
                 int expi = (int) Math.floor(exp);\r
 //                System.out.println("format(" + v + ")");\r