java BigDecimal存储垃圾值的问题

时间:2014-07-02 19:54:24

标签: java bigdecimal double-precision

    BigDecimal b = new BigDecimal(0.05);
    System.out.println(b);

输出:

    0.05000000000000000277555756156289135105907917022705078125

如何处理?

2 个答案:

答案 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值,这就是它在双重

中的表示方式