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
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn