当我尝试下面的代码时,我得到了两个奇怪的输出
42.01 42.01
82.00 82.00
有人确定为什么会发生这种事吗?并且可以在java 7/8中使用下面的RoundingMode for BigDecimal来解决这个问题。
import java.math.*;
class HelloWorld {
public static void main(String[] args) {
BigDecimal hup = new BigDecimal(42.0050).setScale(2,
RoundingMode.HALF_UP);
BigDecimal hev = new BigDecimal(42.0050).setScale(2,
RoundingMode.HALF_EVEN);
BigDecimal hup2 = new BigDecimal(82.0050).setScale(2,
RoundingMode.HALF_UP);
BigDecimal hev2 = new BigDecimal(82.0050).setScale(2,
RoundingMode.HALF_EVEN);
System.out.println(hup);
System.out.println(hev);
System.out.println(hup2);
System.out.println(hev2);
}} 谢谢。
发布于 2022-02-08 12:20:05
这是个有趣的问题。
将您的输入更改为此,并查看不同之处:
BigDecimal hup = new BigDecimal("42.0050").setScale(2,
RoundingMode.HALF_UP);
BigDecimal hev = new BigDecimal("42.0050").setScale(2,
RoundingMode.HALF_EVEN);其结果将是:
42.01 42.00
实际上,问题在于如何给出BigDecimal的输入。
例如,在IntelliJ中,当使用BigDecimal不作为字符串时会看到警告:

https://stackoverflow.com/questions/71033204
复制相似问题