黑马程序员技术交流社区

标题: 大家帮我看看这是为什么啊 [打印本页]

作者: NO?    时间: 2014-3-28 22:37
标题: 大家帮我看看这是为什么啊
class  Test
{
        public static void main(String[] args)
        {
                double a=23.33;
                double b=23;
                System.out.println("(a-b)= "+(a-b));
                //输出的结果居然不是0.33
               //而是a-b = 0.3299999999999983

        }
}



作者: linweiwen    时间: 2014-3-29 00:02
楼主你所遇到的精度损失会在任何操作系统和编程环境中遇到。
浮点数值没办法用十进制来精确表示的原因要归咎于CPU表示浮点数的方法。
在java中,使用double进行运算,有时会出现精度丢失的问题,值会有那么0.00000***1偏差的偏差,导致匹配校验常常出现问题。
原因在于浮点数由两部分组成:指数和尾数。
浮点数的值实际上是由一个特定的数学公式计算得到的。
为了解决这个问题,java还提供了一些API,楼主你可以查一下。





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