• 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类中要封装好这些方法)。

    嘿嘿,就这些了!!

  • 相关阅读:
    第二期冲刺站立会议个人博客6(2016/5/30)
    第二期冲刺站立会议个人博客5(2016/5/29)
    “进度条”博客——第十三周
    第二次冲刺个人工作总结07
    第二次冲刺个人工作总结06
    第十三周学习进度
    第二次冲刺个人工作总结05
    第二次冲刺个人工作总结04
    课堂实验--贴吧找水王问题续
    第二次冲刺个人工作总结03
  • 原文地址:https://www.cnblogs.com/ZT-SummerRain/p/4994684.html
Copyright © 2020-2023  润新知