Revision: 4888
          http://sourceforge.net/p/vexi/code/4888
Author:   mkpg2
Date:     2016-10-21 19:12:16 +0000 (Fri, 21 Oct 2016)
Log Message:
-----------
Added significant figures argument to JSNumber.toDecimalString().

Modified Paths:
--------------
    branches/vexi3/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java
    
branches/vexi3/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js

Modified: 
branches/vexi3/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java
===================================================================
--- branches/vexi3/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java  
2016-10-21 14:38:34 UTC (rev 4887)
+++ branches/vexi3/org.vexi-library.js/src/main/java/org/ibex/js/JSNumber.java  
2016-10-21 19:12:16 UTC (rev 4888)
@@ -142,19 +142,32 @@
             }
             int dpMin = JSU.getArg_int(args, 0, 0);
             int dpMax = JSU.getArg_int(args, 1, 20);
+            int sigFig = JSU.getArg_int(args, 2, Integer.MAX_VALUE);
             String format = "0";
             if(dpMax>0) format+=".";
             for(int i=0; i<dpMin; i++) format+="0";
             for(int i=0; i<dpMax-dpMin; i++) format+="#";
             
+            
+           
             DecimalFormat df = new DecimalFormat(format);
             BigDecimal r = toRational().toBigDecimal(dpMax, 
RoundingMode.HALF_UP);
+            if(sigFig<Integer.MAX_VALUE){
+                       int tenthPower = tenthPower(r);
+               int scale1 = sigFig - tenthPower;
+                   scale1 = Math.max(dpMin, scale1);                           
    
+                   r = r.setScale(scale1, RoundingMode.HALF_UP);               
                
+            }
+              
             String s = df.format(r);
             return JSU.S(s);
         }
         return super.callMethod(this_, method, args);
     }
-   
+       
+       static private int tenthPower(BigDecimal n){
+       return (int)Math.floor(Math.log10(n.doubleValue()))+1;
+    }
     
     abstract public int kind();
     public boolean equals(Object o) {

Modified: 
branches/vexi3/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js
===================================================================
--- 
branches/vexi3/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js
       2016-10-21 14:38:34 UTC (rev 4887)
+++ 
branches/vexi3/org.vexi-library.js/src/test/java/test/js/exec/number/rationalMaths.js
       2016-10-21 19:12:16 UTC (rev 4888)
@@ -7,6 +7,12 @@
 
 assertEquals(300, Number.tryParseString("300r"));
 assertEquals(-123.123r, Number.tryParseString("-123.123r"));
-assertEquals(300r.toDecimalString(3), "300.000");
+assertEquals(300r.toDecimalString(3),      "300.000");
+assertEquals(3.3123r.toDecimalString(2,3), "3.312");
+assertEquals(3.1r.toDecimalString(2,3), "3.10");
+assertEquals(0.001234.toDecimalString(2,null,3), "0.00123");
+assertEquals(123.456.toDecimalString(1,null,3), "123.5");
+
+
 //assertEquals(0, 10.0%0.001);
 //assertEquals(0.05, 1.3%0.25);
\ No newline at end of file

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Vexi-svn mailing list
Vexi-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/vexi-svn

Reply via email to