在 Java 里不要用 float / double 来表示货币金额,核心原因是:
浮点数采用二进制 IEEE 754 表示,很多十进制小数无法被精确表示,会产生舍入误差。
下面分点说明。
float 和 double 遵循 IEEE 754 标准,用二进制存储:
0.1float / double 只能近似存储示例:
System.out.println(0.1 + 0.2);
// 输出:0.30000000000000004
这在科学计算中可以接受,但货币计算不能接受。
货币要求:
0.30000000000000004 元而 float 的问题:
即使 double 比 float 好,也不适合货币。
BigDecimal(最常用)BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
System.out.println(a.add(b)); // 0.3
注意:
// ❌ 错误
new BigDecimal(0.1)
// ✅ 正确
new BigDecimal("0.1")
int amountInCents = 100; // 1 元
适合:
java.time 风格的金额库java.util.Currency
float/double是“近似值”,货币需要“精确值”。
结论:
float 表示钱double 表示钱BigDecimal 或整数(分)如果你愿意,我可以给你一个**“float vs BigDecimal 金额计算对比示例”**。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。