Changed Unit.toString to use 0.### format for pretty small numbers ( 0.0005 < . ...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 20 Apr 2012 18:54:47 +0000 (18:54 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Fri, 20 Apr 2012 18:54:47 +0000 (18:54 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@579 180e2498-e6e9-4542-8430-84ac67f01cd8

core/src/net/sf/openrocket/unit/Unit.java
core/test/net/sf/openrocket/unit/UnitToStringTest.java

index 4703b31b4481f3ac31c8334085138a5253e960a4..dda76944372419fd17d42d203c854e0ffbea4ca6 100644 (file)
@@ -70,42 +70,6 @@ public abstract class Unit {
                return true;
        }
        
-       
-       // Testcases for toString(double)
-       public static void main(String arg[]) {
-               System.out.println(NOUNIT2.toString(0.0049));
-               System.out.println(NOUNIT2.toString(0.0050));
-               System.out.println(NOUNIT2.toString(0.0051));
-               System.out.println(NOUNIT2.toString(0.00123));
-               System.out.println(NOUNIT2.toString(0.0123));
-               System.out.println(NOUNIT2.toString(0.1234));
-               System.out.println(NOUNIT2.toString(1.2345));
-               System.out.println(NOUNIT2.toString(12.345));
-               System.out.println(NOUNIT2.toString(123.456));
-               System.out.println(NOUNIT2.toString(1234.5678));
-               System.out.println(NOUNIT2.toString(12345.6789));
-               System.out.println(NOUNIT2.toString(123456.789));
-               System.out.println(NOUNIT2.toString(1234567.89));
-               System.out.println(NOUNIT2.toString(12345678.9));
-               
-               System.out.println(NOUNIT2.toString(-0.0049));
-               System.out.println(NOUNIT2.toString(-0.0050));
-               System.out.println(NOUNIT2.toString(-0.0051));
-               System.out.println(NOUNIT2.toString(-0.00123));
-               System.out.println(NOUNIT2.toString(-0.0123));
-               System.out.println(NOUNIT2.toString(-0.1234));
-               System.out.println(NOUNIT2.toString(-1.2345));
-               System.out.println(NOUNIT2.toString(-12.345));
-               System.out.println(NOUNIT2.toString(-123.456));
-               System.out.println(NOUNIT2.toString(-1234.5678));
-               System.out.println(NOUNIT2.toString(-12345.6789));
-               System.out.println(NOUNIT2.toString(-123456.789));
-               System.out.println(NOUNIT2.toString(-1234567.89));
-               System.out.println(NOUNIT2.toString(-12345678.9));
-               
-       }
-       
-       
        @Override
        public String toString() {
                return unit;
@@ -115,6 +79,7 @@ public abstract class Unit {
        
        private static final DecimalFormat intFormat = new DecimalFormat("#");
        private static final DecimalFormat decFormat = new DecimalFormat("0.##");
+       private static final DecimalFormat smallFormat = new DecimalFormat("0.###");
        private static final DecimalFormat expFormat = new DecimalFormat("0.00E0");
        
        /**
@@ -134,9 +99,12 @@ public abstract class Unit {
                if (Math.abs(val) >= 100) {
                        return intFormat.format(val);
                }
-               if (Math.abs(val) <= 0.005) {
+               if (Math.abs(val) <= 0.0005) {
                        return "0";
                }
+               if ( Math.abs(val) < 0.095) {
+                       return smallFormat.format(val);
+               }
                
                double sign = Math.signum(val);
                val = Math.abs(val);
@@ -146,7 +114,6 @@ public abstract class Unit {
                        val *= 10;
                }
                val = Math.rint(val) / mul * sign;
-               
                return decFormat.format(val);
        }
        
index 22aed8a701b4c9105d38596e32ff12fa21dc6e0e..6b96a5f1dd08cd20960ea9b3e232ef0b8c6bef51 100644 (file)
@@ -7,43 +7,164 @@ import org.junit.Test;
 public class UnitToStringTest {
 
        @Test
-       public void testToString() {
+       public void testPositiveToString() {
+               // very small positive numbers ( < 0.0005) are returned as "0"
                assertEquals("0",Unit.NOUNIT2.toString(0.00040));
-               assertEquals("0",Unit.NOUNIT2.toString(0.00050));
-               assertEquals("0",Unit.NOUNIT2.toString(0.00051));
-               assertEquals("0",Unit.NOUNIT2.toString(0.00060));
-               assertEquals("0",Unit.NOUNIT2.toString(0.0049));
-               assertEquals("0",Unit.NOUNIT2.toString(0.0050));
-               assertEquals("0.01",Unit.NOUNIT2.toString(0.0051));
-               assertEquals("0",Unit.NOUNIT2.toString(0.00123));
-               assertEquals("0.01",Unit.NOUNIT2.toString(0.0123));
-               assertEquals("0.12",Unit.NOUNIT2.toString(0.1234));
-               assertEquals("1.23",Unit.NOUNIT2.toString(1.2345));
-               assertEquals("12.3",Unit.NOUNIT2.toString(12.345));
-               assertEquals("123",Unit.NOUNIT2.toString(123.456));
-               assertEquals("1235",Unit.NOUNIT2.toString(1234.5678));
-               assertEquals("12346",Unit.NOUNIT2.toString(12345.6789));
+               assertEquals("0",Unit.NOUNIT2.toString(0.00050)); // check boundary of change in format
+
+               // positive number < 0.095 use 3 digit decimal format
+               assertEquals("0.001",Unit.NOUNIT2.toString(0.00051));  // check boundary of change in format
+               assertEquals("0.001",Unit.NOUNIT2.toString(0.00060));
+               
+               // rounding at third digit.
+               assertEquals("0.001",Unit.NOUNIT2.toString(0.0014));
+               assertEquals("0.002",Unit.NOUNIT2.toString(0.0015));  // round to even
+               assertEquals("0.002",Unit.NOUNIT2.toString(0.0016));
+               assertEquals("0.002",Unit.NOUNIT2.toString(0.0024));
+               assertEquals("0.002",Unit.NOUNIT2.toString(0.0025)); // round to even
+               assertEquals("0.003",Unit.NOUNIT2.toString(0.0026));
+               assertEquals("0.009",Unit.NOUNIT2.toString(0.0094));
+
+               assertEquals("0.01",Unit.NOUNIT2.toString(0.0095));  // no trailing zeros after rounding
+
+               assertEquals("0.011",Unit.NOUNIT2.toString(0.0114));
+               assertEquals("0.012",Unit.NOUNIT2.toString(0.0115)); // round to even
+               assertEquals("0.012",Unit.NOUNIT2.toString(0.0119));
+               assertEquals("0.012",Unit.NOUNIT2.toString(0.0124));
+               assertEquals("0.012",Unit.NOUNIT2.toString(0.0125)); // round to even
+               assertEquals("0.013",Unit.NOUNIT2.toString(0.0129));
+
+               assertEquals("0.095",Unit.NOUNIT2.toString(0.0949)); // boundary check
+               
+               // positive numbers < 100 
+               assertEquals("0.1",Unit.NOUNIT2.toString(0.095)); // boundary check
+               
+               assertEquals("0.11",Unit.NOUNIT2.toString(0.111));
+               assertEquals("0.12",Unit.NOUNIT2.toString(0.115)); // round to even
+               assertEquals("0.12",Unit.NOUNIT2.toString(0.117));
+               assertEquals("0.12",Unit.NOUNIT2.toString(0.121));
+               assertEquals("0.12",Unit.NOUNIT2.toString(0.125)); // round to even
+               assertEquals("0.13",Unit.NOUNIT2.toString(0.127));
+
+               assertEquals("1.11",Unit.NOUNIT2.toString(1.113));
+               assertEquals("1.12",Unit.NOUNIT2.toString(1.115)); // round to even
+               assertEquals("1.12",Unit.NOUNIT2.toString(1.117));
+               assertEquals("1.12",Unit.NOUNIT2.toString(1.123));
+               assertEquals("1.12",Unit.NOUNIT2.toString(1.125)); // round to even
+               assertEquals("1.13",Unit.NOUNIT2.toString(1.127));
+
+               assertEquals("12.3",Unit.NOUNIT2.toString(12.320));
+               assertEquals("12.4",Unit.NOUNIT2.toString(12.350)); // round to even
+               assertEquals("12.4",Unit.NOUNIT2.toString(12.355));
+               assertEquals("12.4",Unit.NOUNIT2.toString(12.420));
+               assertEquals("12.4",Unit.NOUNIT2.toString(12.450)); // round to even
+               assertEquals("12.5",Unit.NOUNIT2.toString(12.455));
+
+               // positive numbers <= 1E6
+               assertEquals("123",Unit.NOUNIT2.toString(123.20));
+               assertEquals("124",Unit.NOUNIT2.toString(123.50)); // round to even
+               assertEquals("124",Unit.NOUNIT2.toString(123.55));
+               assertEquals("124",Unit.NOUNIT2.toString(124.20));
+               assertEquals("124",Unit.NOUNIT2.toString(124.50)); // round to even
+               assertEquals("125",Unit.NOUNIT2.toString(124.55));
+               
+               assertEquals("1234",Unit.NOUNIT2.toString(1234.2));
+               assertEquals("1234",Unit.NOUNIT2.toString(1234.5)); // round to even
+               assertEquals("1235",Unit.NOUNIT2.toString(1234.6));
+               assertEquals("1235",Unit.NOUNIT2.toString(1235.2));
+               assertEquals("1236",Unit.NOUNIT2.toString(1235.5)); // round to even
+               assertEquals("1236",Unit.NOUNIT2.toString(1235.6));
+
                assertEquals("123457",Unit.NOUNIT2.toString(123456.789));
+
+               assertEquals("1000000",Unit.NOUNIT2.toString(1000000)); // boundary check
+               
+               // positive numbers > 1E6
                assertEquals("1.23E6",Unit.NOUNIT2.toString(1234567.89));
                assertEquals("1.23E7",Unit.NOUNIT2.toString(12345678.9));
+               
+               
+       }
+       
+       @Test
+       public void testNegativeToString() {
+               // very small negative numbers ( < 0.0005) are returned as "0"
                assertEquals("0",Unit.NOUNIT2.toString(-0.00040));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.00050));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.00051));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.00060));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.0049));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.0050));
-               assertEquals("-0.01",Unit.NOUNIT2.toString(-0.0051));
-               assertEquals("0",Unit.NOUNIT2.toString(-0.00123));
-               assertEquals("-0.01",Unit.NOUNIT2.toString(-0.0123));
-               assertEquals("-0.12",Unit.NOUNIT2.toString(-0.1234));
-               assertEquals("-1.23",Unit.NOUNIT2.toString(-1.2345));
-               assertEquals("-12.3",Unit.NOUNIT2.toString(-12.345));
-               assertEquals("-123",Unit.NOUNIT2.toString(-123.456));
-               assertEquals("-1235",Unit.NOUNIT2.toString(-1234.5678));
-               assertEquals("-12346",Unit.NOUNIT2.toString(-12345.6789));
+               assertEquals("0",Unit.NOUNIT2.toString(-0.00050)); // check boundary of change in format
+
+               // negative number < 0.095 use 3 digit decimal format
+               assertEquals("-0.001",Unit.NOUNIT2.toString(-0.00051));  // check boundary of change in format
+               assertEquals("-0.001",Unit.NOUNIT2.toString(-0.00060));
+               
+               // rounding at third digit.
+               assertEquals("-0.001",Unit.NOUNIT2.toString(-0.0014));
+               assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0015));  // round to even
+               assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0016));
+               assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0024));
+               assertEquals("-0.002",Unit.NOUNIT2.toString(-0.0025)); // round to even
+               assertEquals("-0.003",Unit.NOUNIT2.toString(-0.0026));
+               assertEquals("-0.009",Unit.NOUNIT2.toString(-0.0094));
+
+               assertEquals("-0.01",Unit.NOUNIT2.toString(-0.0095));  // no trailing zeros after rounding
+
+               assertEquals("-0.011",Unit.NOUNIT2.toString(-0.0114));
+               assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0115)); // round to even
+               assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0119));
+               assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0124));
+               assertEquals("-0.012",Unit.NOUNIT2.toString(-0.0125)); // round to even
+               assertEquals("-0.013",Unit.NOUNIT2.toString(-0.0129));
+
+               assertEquals("-0.095",Unit.NOUNIT2.toString(-0.0949)); // boundary check
+               
+               // negative numbers < 100 
+               assertEquals("-0.1",Unit.NOUNIT2.toString(-0.095)); // boundary check
+               
+               assertEquals("-0.11",Unit.NOUNIT2.toString(-0.111));
+               assertEquals("-0.12",Unit.NOUNIT2.toString(-0.115)); // round to even
+               assertEquals("-0.12",Unit.NOUNIT2.toString(-0.117));
+               assertEquals("-0.12",Unit.NOUNIT2.toString(-0.121));
+               assertEquals("-0.12",Unit.NOUNIT2.toString(-0.125)); // round to even
+               assertEquals("-0.13",Unit.NOUNIT2.toString(-0.127));
+
+               assertEquals("-1.11",Unit.NOUNIT2.toString(-1.113));
+               assertEquals("-1.12",Unit.NOUNIT2.toString(-1.115)); // round to even
+               assertEquals("-1.12",Unit.NOUNIT2.toString(-1.117));
+               assertEquals("-1.12",Unit.NOUNIT2.toString(-1.123));
+               assertEquals("-1.12",Unit.NOUNIT2.toString(-1.125)); // round to even
+               assertEquals("-1.13",Unit.NOUNIT2.toString(-1.127));
+
+               assertEquals("-12.3",Unit.NOUNIT2.toString(-12.320));
+               assertEquals("-12.4",Unit.NOUNIT2.toString(-12.350)); // round to even
+               assertEquals("-12.4",Unit.NOUNIT2.toString(-12.355));
+               assertEquals("-12.4",Unit.NOUNIT2.toString(-12.420));
+               assertEquals("-12.4",Unit.NOUNIT2.toString(-12.450)); // round to even
+               assertEquals("-12.5",Unit.NOUNIT2.toString(-12.455));
+
+               // negative numbers <= 1E6
+               assertEquals("-123",Unit.NOUNIT2.toString(-123.20));
+               assertEquals("-124",Unit.NOUNIT2.toString(-123.50)); // round to even
+               assertEquals("-124",Unit.NOUNIT2.toString(-123.55));
+               assertEquals("-124",Unit.NOUNIT2.toString(-124.20));
+               assertEquals("-124",Unit.NOUNIT2.toString(-124.50)); // round to even
+               assertEquals("-125",Unit.NOUNIT2.toString(-124.55));
+               
+               assertEquals("-1234",Unit.NOUNIT2.toString(-1234.2));
+               assertEquals("-1234",Unit.NOUNIT2.toString(-1234.5)); // round to even
+               assertEquals("-1235",Unit.NOUNIT2.toString(-1234.6));
+               assertEquals("-1235",Unit.NOUNIT2.toString(-1235.2));
+               assertEquals("-1236",Unit.NOUNIT2.toString(-1235.5)); // round to even
+               assertEquals("-1236",Unit.NOUNIT2.toString(-1235.6));
+
                assertEquals("-123457",Unit.NOUNIT2.toString(-123456.789));
+
+               assertEquals("-1000000",Unit.NOUNIT2.toString(-1000000)); // boundary check
+               
+               // negative numbers > 1E6
                assertEquals("-1.23E6",Unit.NOUNIT2.toString(-1234567.89));
                assertEquals("-1.23E7",Unit.NOUNIT2.toString(-12345678.9));
-
+               
+               
        }
+       
+       
 }