App 1 Icon
imToken: BTC & ETH
下载
App 2 Icon
imToken: BTC & ETH
下载
App 3 Icon
imToken: BTC & ETH
下载

Java算钱千万别用double,BigDecimal才是正确选择

imtoken钱包官网 imtoken免费下载 6

Java算钱千万别用double,BigDecimal才是正确选择

做金融系统的这些年,我见过太多程序员在金额计算上栽跟头。用double做加减乘除,结果经常多出几毛钱或者少几分钱,线上出了问题排查半天才发现是精度丢失。货币数字在Java里有严格的规范要求,必须用BigDecimal而不是double,这不只是编码习惯问题,而是直接关系到账目准确性的大事。

double类型存储浮点数存在先天缺陷,0.1加上0.2的结果不是0.3而是0.30000000000000004。财务系统里每一笔交易都要精确到分,小数点后的任何偏差都会导致账实不符。BigDecimal提供了精确的十进制运算能力,能够完整保留数值的有效位数,不会丢失精度信息。

创建BigDecimal对象时java货币数字的精确处理,一定要传字符串参数而不是double值。new BigDecimal(0.1)依然会产生精度问题,只有new BigDecimal("0.1")才能得到预期结果。做运算时也要养成习惯,add、subtract、multiply、divide方法返回的是新对象,不会影响原始值。除法运算务必指定精度和舍入模式Java算钱千万别用double,BigDecimal才是正确选择,否则可能抛出异常。

很多开发者喜欢直接用double的equals方法比较金额,这种做法极其危险。应该用compareTo方法来比较大小关系,它能正确处理精度差异。String.format和DecimalFormat适合展示用途,但绝不能用在业务计算中,它们只是把数值格式化展示,底层仍然是double类型。

标签: java货币数字的精确处理

上一篇延华智能做数字货币业务吗

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!