黑马程序员技术交流社区

标题: 为什么double类型的两个小数2.3+3.4=5.699999999999999 [打印本页]

作者: 江南小道士    时间: 2013-11-29 16:58
标题: 为什么double类型的两个小数2.3+3.4=5.699999999999999
本帖最后由 江南小道士 于 2013-11-29 22:30 编辑

public static void main(String[] args)
        {
                double x = add(2.3,3.4);
                System.out.println("x="+x);
        }

        public static double add(double a,double b)
        {
                return a+b;
        }


运行结果——  x=5.699999999999999

为什么?为什么?哪位能解答一下吗?
作者: HAnG    时间: 2013-11-29 17:10
要归咎于CPU表示浮点数的方法.举个例子:2.4的二进制表示并非就是精确的2.4,而是最为接近4.199999809265137;原因在于浮点数由两部分组成:指数和尾数,浮点数的值实际上是由cpu的某个数学公式计算得到的,所以您所遇到的精度损失会在任何操作系统和编程环境中遇到。
作者: 江南小道士    时间: 2013-11-29 17:24
HAnG 发表于 2013-11-29 17:10
要归咎于CPU表示浮点数的方法.举个例子:2.4的二进制表示并非就是精确的2.4,而是最为接近4.19999980926513 ...

谢谢,这部分好复杂,还没学到~~~
刚开始学习,只知道小数默认为double类型,double占八个八位~~~~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2