今天在写段代码模拟计算器的时候,偶然发现,当我进行小数运算的时候,竟然出现了令我惊讶的结果,后来问了问度娘,才晓得,原来这里面还有点知识呢,下面是介绍:
你猜下面几句的结果是多少?
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类中要封装好这些方法)。
嘿嘿,就这些了!!