平常对于浮点数进行运算的时候,一般情况下结果是准确的。
但是在一些个别情况下系统中通过一些小数计算返回的结果会不准确, 例如: if (0.2*3==0.6){ System.out.println("相等"); } else { System.out.println("不相等"); } 结果: 不相等
----
对于有时候计算的会出现精度丢失的问题,有时会莫名其妙的数值末尾出现一串数字,对于这些缺憾,java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善浮点数计算无法进行精确计算的缺憾。
//精度减法-针对计算两个浮点值数据相减,精度丢失问题 public static void reduceDecimal(float num1, float num2){ System.out.println("--------reduceDecimal----------------"); //非精确的输出 System.out.println("非精度的输出: " + (num1-num2)); //精度计算 //把float转化为BigDecimal,首先要把float转化为String在转为BigDecimal BigDecimal bigDecimal1 = new BigDecimal(Float.toString(num1)); BigDecimal bigDecimal2 = new BigDecimal(Float.toString(num2)); //两数值相减的计算 BigDecimal bigDecimal = bigDecimal1.subtract(bigDecimal2); //把BigDecimal转化为float float price = bigDecimal.floatValue(); System.out.println("精度的输出:" + price); }
输入的数值:
float a1 = 19.9f; float a2 = 19.2f;
reduceDecimal(a1, a2);
输出结果:
--------reduceDecimal----------------
非精度的输出: 0.69999886
精度的输出:0.7