Vik*_*ngh 2 java bigdecimal double-precision
BigDecimal b = new BigDecimal(0.05);
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)
输出:
0.05000000000000000277555756156289135105907917022705078125
Run Code Online (Sandbox Code Playgroud)
这要怎么处理呢?
这个数字是严格正确的。这是 double 的精确值 0.05。这是因为double无法准确表示所有值,而必须为您提供最接近的可表示值。当您打印该值时,它假设您想要对其进行舍入,并隐藏表示错误。BigDecimal 只是向您展示其真正的值。
如果您想从 double 转换为 BigDecimal 并按照您期望的方式使用
BigDecimal b = BigDecimal.valueOf(0.05);
Run Code Online (Sandbox Code Playgroud)
另一个解决方案是不使用 BigDecimal。如果您使用double适当的舍入,您将得到相同的答案,并且代码少得多,代码快得多。