原文地址: Round a double to 2 decimal places
网友 Luca Vix
function Double round2(Double val) {
return new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue();
}
注意toString()方法!!!!
这是因为BigDecimal需要将double转换成精确的二进制数!!!
下面是一些答案以及他们的失败案例:
// 没有bug!
new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue()
Double val = 260.775d;
new BigDecimal(val).setScale(2,RoundingMode.HALF_UP).doubleValue()
期待值 260.78 实际值 260.77
Double val = 260.775d;
Math.round(val * 100.d) / 100.0d
期待值 260.78 实际值 260.77
Double val = 256.025d;
new DecimalFormat("0.00").format(val)
期待值 256.03 实际值 256.02
Double val = 256.025d;
(int)(val * 100 + 0.5) / 100.0;
期待值 256.03 实际值 256.02
网友 Pritesh Mhatre
请使用 Apache commons math:
Precision.round(10.4567, 2)
该方法的实质还是用的上述网友的方法
![](https://img.haomeiwen.com/i11574394/611b789ef65563da.png)
commons-math的maven坐标
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.2</version>
</dependency>
网友评论