diff --git a/bits/60_number.js b/bits/60_number.js index 5d13dfc..655f5bc 100644 --- a/bits/60_number.js +++ b/bits/60_number.js @@ -51,7 +51,24 @@ function hashq(str/*:string*/)/*:string*/ { } return o; } -function rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); } +function rnd(val/*:number*/, d/*:number*/)/*:string*/ { + var result + if(("" + val).indexOf("e") === -1) { + result = +(Math.round(val + "e+" + d) + "e-" + d); + } else { + var arr = ("" + val).split("e"); + var sig = "" + if(+arr[1] + d > 0) { + sig = "+"; + } + result = +(Math.round(+arr[0] + "e" + sig + (+arr[1] + d)) + "e-" + d); + } + if (isNaN(result)) { + var dd = Math.pow(10, d); + result = Math.round(val * dd) / dd; + } + return "" + result +} function dec(val/*:number*/, d/*:number*/)/*:number*/ { if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) { return 0; diff --git a/ssf.flow.js b/ssf.flow.js index dd0607b..89c5bef 100644 --- a/ssf.flow.js +++ b/ssf.flow.js @@ -312,7 +312,24 @@ function hashq(str/*:string*/)/*:string*/ { } return o; } -function rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); } +function rnd(val/*:number*/, d/*:number*/)/*:string*/ { + var result + if(("" + val).indexOf("e") === -1) { + result = +(Math.round(val + "e+" + d) + "e-" + d); + } else { + var arr = ("" + val).split("e"); + var sig = "" + if(+arr[1] + d > 0) { + sig = "+"; + } + result = +(Math.round(+arr[0] + "e" + sig + (+arr[1] + d)) + "e-" + d); + } + if (isNaN(result)) { + var dd = Math.pow(10, d); + result = Math.round(val * dd) / dd; + } + return "" + result +} function dec(val/*:number*/, d/*:number*/)/*:number*/ { if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) { return 0; diff --git a/ssf.js b/ssf.js index cc86fea..a54da6f 100644 --- a/ssf.js +++ b/ssf.js @@ -307,7 +307,24 @@ function hashq(str) { } return o; } -function rnd(val, d) { var dd = Math.pow(10,d); return ""+(Math.round(val * dd)/dd); } +function rnd(val, d) { + var result + if(("" + val).indexOf("e") === -1) { + result = +(Math.round(val + "e+" + d) + "e-" + d); + } else { + var arr = ("" + val).split("e"); + var sig = "" + if(+arr[1] + d > 0) { + sig = "+"; + } + result = +(Math.round(+arr[0] + "e" + sig + (+arr[1] + d)) + "e-" + d); + } + if (isNaN(result)) { + var dd = Math.pow(10, d); + result = Math.round(val * dd) / dd; + } + return "" + result +} function dec(val, d) { if (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) { return 0; diff --git a/test/comma.tsv b/test/comma.tsv index dee043e..ec38799 100644 --- a/test/comma.tsv +++ b/test/comma.tsv @@ -14,3 +14,5 @@ value #.0000,,, #.0000,, #.0000, #,##0.0 ###,##0 ###,### #,###.00 123456789012 123.4568 123456.7890 123456789.0120 123,456,789,012.0 123,456,789,012 123,456,789,012 123,456,789,012.00 4321 .0000 .0043 4.3210 4,321.0 4,321 4,321 4,321.00 4321234 .0043 4.3212 4321.2340 4,321,234.0 4,321,234 4,321,234 4,321,234.00 +1234652.68499999999995 .0012 1.2347 1234.6527 1,234,652.7 1,234,653 1,234,653 1,234,652.69 +-4321234 -0.0043 -4.3212 -4321.2340 -4,321,234.0 -4,321,234 -4,321,234 -4,321,234.00