【发布时间】:2020-10-26 13:15:04
【问题描述】:
据我了解,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 知道也有两位小数。这至少是我所期望的。
如何使用 BigDecimaledit: 以两个双精度值作为输入和已知的小数位数正确解决这个问题? [即,因为 API 除了这两个双精度数之外没有给我任何东西。](我知道还有其他可靠的方法可以用钱计算(从用int 以美分计算开始),但这已经超出了我的问题的范围。)
【问题讨论】:
标签: java bigdecimal