我知道这个问题重复了很多次,但请先看一下声明,然后再将其标记为已回答:)
为了将 double 值截断到小数点后 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.
他们都错了,因为他们在尝试不可能的事情。 没有将 double 截断为小数点后两位,因为 double 没有小数位。他们有二进制的地方。参见 my answer here为证。如果您想要小数位,则必须使用小数基数,即 BigDecimal
或 DecimalFormat
。
关于java - 将 Double 截断为小数点后两位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818919/