我知道这个问题有很多重复,但请先看一下声明,而不是标记它已经回答了:)
为了截断双精度值2个小数位,我使用了两种方法,这些方法大多数都是提到的.它们如下
//this one
DecimalFormat dtime = new DecimalFormat("#.##");
return Double.valueOf(dtime.format(val));
//or the one below
BigDecimal bd = new BigDecimal(val);
BigDecimal rounded = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
return rounded.doubleValue();
问题在于,对于这两种方式,我主要在数据集中获得正确的舍入值.但奇怪的是,同时我获得的值为2.00000000000005或19.97999999999.
我没有得到的问题是为什么只有少数几个值没有四舍五入.可能有什么不对?
解决方法:
For truncating the double values 2 decimal places I use two ways which are mostly mentioned everywhere.
他们都错了,因为他们正在尝试不可能的事情.没有截断双精度到2位小数的东西,因为双精度没有小数位.他们有二进制位置.有关证据,请参见my answer here.如果你想要小数位,你必须使用十进制基数,即BigDecimal或DecimalFormat.
标签:java,double,math
来源: https://codeday.me/bug/20190709/1410459.html