参考文章:
https://blog.csdn.net/Mr_Smile2014/article/details/52155093?locationNum=7&fps=1
https://blog.csdn.net/rongbo_j/article/details/50733224
今天在处理计算小数及整数位占比时,无意发现0.29*100变成了28.999999999999996,这是怎么回事呢?
原来是计算机存储问题。对float或double有这样的情况。
解决方案:
1、使用BigDecimal
2、BigDecimal取余运算:public BigDecimal[] divideAndRemainder(BigDecimal divisor);
// 设置个位数,如 0.09 * 100 % 10 = 9
private int setBitsValue(double ratio2) {
// 解决0.29*100后结果变成28.999999999999996的问题
BigDecimal num = new BigDecimal(Double.toString(ratio2));
BigDecimal number100 = new BigDecimal(Double.toString(100));
double value = num.multiply(number100).doubleValue(); // radio2 * 100;
BigDecimal v = new BigDecimal(Double.toString(value));
BigDecimal[] result = v.divideAndRemainder(BigDecimal.valueOf(10));//取模
//输出结果:商和余数
try {
return result[1].intValue();
} catch (Exception e) {
return 0;
}
}