Java保留两位小数和js保留两位小数一致性研究(2)

1.当保留至少一位小数时,js的toFixed方式与java的DecimalFormat和NumberFormat方式一致,结果不确定,四舍五可能不入!当不保留小数时,两种算法不一致,js四舍五入,java四舍五取偶。

2.java可以做到精确的四五五入可采用String.format方式和BigDecimal的ROUND_HALF_UP方式,但是必须确保BigDecimal的构造参数为String类型,否则也会发生五不入现象。

3.js精确四舍五入实现方法,网上找到的例子,如下

//覆盖默认的toFixed函数
Number.prototype.toFixed = function(s) 

    return (parseInt(this * Math.pow(10,s) + 0.5)/Math.pow(10,s)).toString(); 

所以,如果保持前后台计算一致,则有如下方案

前端      后台     结果   
toFixed(n); n>=1   DecimalFormat or NumberFormat     不精确四舍五入,但结果一致  
toFixed(0);   String.format("%.0f",0.5) 或者 BigDecimal使用ROUND_HALF_UP模式    精确四舍五入,结果一致  
改进后的toFixed   String.format 或者 BigDecimal使用ROUND_HALF_UP模式    精确四五五入,结果也一致  

由于浏览器的多样性,数据的无限性,没有做过多测试,这只是初步结论。要确保万无一失,还是由一处计算方为上策!

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a13d28af95ba3eb31e14159bd4d9fed8.html