Java及JS中double类型的数据加减乘除运算时精度错误(如:148163.1 - 82692.09 会= 5471.010000000009) double类型加减乘除精度会有问题

解决方案:

//like12 modified,20220210,bug,double类型加减乘除精度会有问题
BigDecimal aa = new BigDecimal(Double.toString(stdAll.getSumcoachPass()));
BigDecimal bb = new BigDecimal(Double.toString(std.getSumcoachPass()));
BigDecimal result = aa.add(bb);
stdAll.setSumcoachPass(result.doubleValue());

Java

double a = 11540.0;

double b = 0.35;

double result = a * b;

BigDecimal a1 = new BigDecimal(Double.toString(a));

BigDecimal b1 = new BigDecimal(Double.toString(b));

BigDecimal result1 = a1.multiply(b1);

System.out.println("控制台输出:" + a + " * " + b + " = " + result);

System.out.println("控制台输出2:" + a1 + " * " + b1 + " = " + result1);

System.out.println("计算器正确是:" 4039);

控制台输出:11540.0 * 0.35 = 4038.9999999999995
控制台输出2:11540.0 * 0.35 = 4039.000
计算器正确是:4039

JS

//js中double类型的数据加减的时候出错(如:148163.1 - 82692.09 会= 5471.010000000009)
    var sumMoneyNew = sumMoneyGlobal - (distributionCostsGlobal - distributionCosts);
    sumMoneyNew = sumMoneyNew.toFixed(2);

解决办法:

js中有

Math.round(x)方法,返回数字最接近的整数,四舍五入取整数,即舍去小数部分

Number.toFixed()方法,能保留小数点后面的指定位数

原因:

double相加(減)结果会有些误差 - 焰尾迭 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值