java小数计算丢失精度的问题及解决办法

 看一段简单的代码

public class FloatTest {

public static void main(String[] args) {

System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));

System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));

System.out.println("4.015 * 100 = " + (4.015 * 100));

System.out.println("123.3 / 100 = " + (123.3 / 100));

}

}

输出结果为:

0.05 + 0.01 = 0.060000000000000005

1.0 - 0.42 = 0.5800000000000001

4.015 * 100 = 401.49999999999994

123.3 / 100 = 1.2329999999999999

原因:计算机计算是二进制,浮点数无法使用二进制进行精确运算

解决办法

使用java.math.BigDecimal 进行运算,下面演示一下加法,其他运算改变方法即可:

BigDecimal a = new BigDecimal(0.05);

BigDecimal b = new BigDecimal(0.01);

System.out.println(a.add(b).floatValue());

输出为:0.06

四种基本运算方法如下

BigDecimal add(BigDecimal augend)  //加法运算

BigDecimal subtract(BigDecimal subtrahend) //减法运算

BigDecimal multiply(BigDecimal multiplicand) //乘法运算

BigDecimal divide(BigDecimal divisor) //除法运算

赞 (0) 评论 分享 ()