Java中double类型数据的精度问题

今天在写段代码模拟计算器的时候,偶然发现,当我进行小数运算的时候,竟然出现了令我惊讶的结果,后来问了问度娘,才晓得,原来这里面还有点知识呢,下面是介绍:

你猜下面几句的结果是多少?

1 public class  Demo{       
2         @Test
3     public void demo3() {
4         System.out.println(1 - 0.42);
5         System.out.println(2.4 + 1.2);
6         System.out.println(4.015 * 100);
7         System.out.println(123.1 / 100);
8     }
9  }    

但我想告诉你,在控制台上输出的结果是:

0.5800000000000001
3.5999999999999996
401.49999999999994
1.2309999999999999

那么对应的解决方案是啥呢?

我这里给出了一段代码:

1 public class Demo{
2   @Test
3     public void demo3() {
4         BigDecimal bd = new BigDecimal("1");
5         System.out.println(bd.subtract(new BigDecimal("0.42")));
6     }  
7 }

这段代码就告诉了你,当你用到浮点数的时候,为避免出现精度失真的情况,可以用BigDecimal来计算,注意:BigDecimal的构造器中,你传入的是字符串哟!!

如果你还想进行加法、乘法、除法的话,推荐你看看JDK中java.lang.math这个包下的BigDecimal具体方法,可以满足你的一般需求(包括小数点后保留几位等),当然,要是你觉得这样还是不够简便的话,你完全可以自己写个tool类,来专门完成你的运算,内部就用BigDecimal来实现,用的时候,你想怎么调用怎么调用(前提是你的tool类中要封装好这些方法)。

嘿嘿,就这些了!!

原文地址:https://www.cnblogs.com/ZT-SummerRain/p/4994684.html