今天碰到一个需求。关于小数点的处理,看起来非常简单的事情,却花了一定时间做了一些试验。最后简单总结一下,以便备忘。
需求简化一下表达是这样的:
有A、B两列,A/B=C。这3列在数据库中都以decimal存放。
在应用中,要求这3列,最多保留两位小数,去掉小数点后无意义的0。举例如下:
3.03表示为3.03
3.30表示为3.3
3.0表示为3
前后端都会改变这几个数据。
1、前端实现。(javascript)
前端javascript而言,因为小数点精度计算经常有误差,为确保得到2位小数点,调用了toFixed函数。但是,toFixed以后,不管小数点后是不是0,都保留2位。
var a = 6.02;
var b = 3.01
var c = a/b.toFixed(2) ;//c得到了2.00
为了得到2,想了一个迂回的办法:c = a/b.toFixed(2)*100/100
2、后端实现。(java)
用java.text.DecimalFormat("0.##")即可。
BigDecimal a = new BigDecimal(“6.02”);
BigDecimal b = new BigDecimal(“3.01”);
与js不同,不能用*100/100的方式,因为java中BigDecimal的运算小数点是以公式中各项的最长小数点位数作为最终结果的小数点位数。这样处理后结果仍然是2位数。
用DecimalFormat(“0.##”)即可解决。