据我理解,BigDecimal
用于处理具有固定小数位数的数字(例如货币)。下面是我编写的一个小程序:
import java.math.*;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(11.22, new MathContext(2, RoundingMode.HALF_UP));
System.out.println("a: " + a);
BigDecimal b = a.add(new BigDecimal(0.04));
System.out.println("b: " + b);
}
}
我期望看到:
a: 11.22
b: 11.26
但我得到的是:
a: 11
b: 11.040000000000000000832667268468867405317723751068115234375
我设置了a
保留两位小数,但是它既不打印这些小数位,甚至忘记它们并将其舍入为整型。为什么?b
应该加上0.04,并从a
知道有两个小数位。这至少是我期望的。
如何使用BigDecimal正确解决这个问题编辑:需要以两个double值作为输入,并且已知小数点后的位数? [即,因为API没有给我除这两个double之外的任何东西] (我知道有其他可靠地计算货币的方法(从以int
形式计算分开始),但这超出了我的问题范围。)