BigDecimal b = new BigDecimal(0.05);
System.out.println(b);
输出:
0.05000000000000000277555756156289135105907917022705078125
如何处理?
答案 0 :(得分:4)
这个数字是完全正确的。这是双精度值0.05。这是因为double
无法准确表示所有值,而是必须为您提供最接近的可表示值。当您打印该值时,它假定您要对其进行舍入,并隐藏表示错误。 BigDecimal只是告诉你它的真正价值。
如果你想从一个双倍转换为一个BigDecimal,并按照你期望的方式使用它
BigDecimal b = BigDecimal.valueOf(0.05);
另一种解决方案是不使用BigDecimal。如果您使用double
进行适当的舍入,您将获得相同的答案,代码更少,代码更快。
答案 1 :(得分:2)
将其转换为此
BigDecimal b = new BigDecimal("0.05");
当您传递0.05
时,它默认为double
值,这就是它在双重