我想在java中使用double。我希望它像这样四舍五入:
我尝试使用这样的圆形:
amount = amount *10;
amount = Math.round(amount)/10;
但是,就像你看到的那样,它不起作用。
感谢您的回答!
答案 0 :(得分:2)
Math.round(amount * 20) / 20f
是单向的。
答案 1 :(得分:0)
请注意,使用float进行舍入会因float的内部二进制表示而产生错误(对于double来说也是如此)。
因此,对于金额为23.01的Math.round(amount * 20) / 20f
这样的操作可以得到结果23.000000003(这是一个我没有检查过的例子,但是使用少量测试很容易找到问题)。
使用BigDecimal
代替。
答案 2 :(得分:0)
我会这样做:
double[] amounts = new double[]{24.04, 24.07, 24.02, 24.08};
for(double d : amounts){
double d2 = Math.round(d * 20) / 20.0;
System.out.println(String.format("%.2f -> %.2f",d,d2));
}
结果如下:
24,04 -> 24,05
24,07 -> 24,05
24,02 -> 24,00
24,08 -> 24,10
[编辑] 正如其他人所说,可能存在一些精确错误。如果按照我的示例中的建议打印它,它很可能永远不可见。但这取决于你需要什么数字....