解决方案:
//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()方法,能保留小数点后面的指定位数
原因: