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