A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NO? 中级黑马   /  2014-3-28 22:37  /  1043 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

        }
}


1 个回复

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

评分

参与人数 1黑马币 +2 收起 理由
NO? + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马