Java 大小数舍入错误
我期待着这个代码:Java 大小数舍入错误,java,rounding,bigdecimal,Java,Rounding,Bigdecimal,我期待着这个代码: double valore = 20.775; BigDecimal c = new BigDecimal(valore); c = c.setScale(2, RoundingMode.HALF_UP); System.out.println(c.doubleValue()); 返回20.78,但返回20.77 这是一个错误吗?还是我遗漏了什么?一切都是正确的。您可以在中阅读一些高级细节,或在中阅读更多内容 将BigDecimal构造
double valore = 20.775;
BigDecimal c = new BigDecimal(valore);
c = c.setScale(2, RoundingMode.HALF_UP);
System.out.println(c.doubleValue());
返回20.78,但返回20.77
这是一个错误吗?还是我遗漏了什么?一切都是正确的。
您可以在中阅读一些高级细节,或在中阅读更多内容 将
BigDecimal
构造函数与double
param一起使用并不常见,因为它将准确地表示double
中的内容。
因此,当您编写:new BigDecimal(20.775)
时,结果不一定是20.775(而是类似于20.77499999999985789145284797996282577514648375
)
供您测试:1) 测试大十进制表示法
a)
System.out.println(新的BigDecimal(20.775))代码>=>20.774999999999857891452847979962825775146484375
b) System.out.println(新的BigDecimal(“20.775”)代码>=>20.775
2) 使用不同的BigDecimal
构造函数测试舍入:
a) 新的BigDecimal(20.775)
四舍五入后将显示20.77。
b) 新的BigDecimal(“20.775”)
四舍五入后将显示20.78。
c) 新的BigDecimal(String.valueOf(20.775)
四舍五入后将显示20.78
因此,作为结论:
不要将BigDecimal
构造函数与double
param一起使用。
而是将BigDecimal
构造函数与String
param一起使用
希望对您有所帮助BigDecimal的可能重复项是舍入正确。您使用的是doubleValue(),这会导致不正确。