黑马程序员技术交流社区

标题: 关于double相加问题 [打印本页]

作者: jttsai    时间: 2013-10-30 13:08
标题: 关于double相加问题
先上简单代码:
public class Demo {

        public static void main(String[] args) {
               
                double x = 0.9;
                double y = 0.8;
                double z = x + y;
                System.out.println(z);

        }

}

输出结果为:1.7000000000000002

为什么会出现精度的问题?原因是什么?

我在《Effective   Java》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用 java.math.BigDecimal。
但我始终不明白相加的出现的原理是什么??
作者: 王飚    时间: 2013-10-30 14:08
  1. /*
  2. 这是由于double数据类型的有效位所决定的,
  3. 如果楼主想要只保留其有效的运算位,那
  4. 将其结果强转成float即可:
  5. 以下已经帮你做了注释:

  6. */

  7. class DoubleQuestion
  8. {
  9.         public static void main(String[] args)
  10.                 {
  11.                
  12.                 double x = 0.9;
  13.                 double y = 0.8;
  14.                 double z = x + y;
  15.                 System.out.println((float)z);//将结果强转成float数据类型即可

  16.         }
  17. }
复制代码

作者: 瓶中人    时间: 2013-10-31 22:13
本帖最后由 瓶中人 于 2013-10-31 22:14 编辑

没有什么原理,这就是双精度的漏洞而已,转换为单精度就可以了,不过没有必要就是,有一一点差错是正常的,用BigDecimal应该就是这个漏洞对应的方法,它的精度比双精度要高。
作者: wjy495678328    时间: 2013-11-1 20:29
楼主可将输出语句转换为单精度
public class Demo {

        public static void main(String[] args){
                double x = 0.9;
                double y = 0.8;
                double z = x + y;
               System.out.println((float)z);
                                }
}
作者: 狼王    时间: 2013-11-3 07:31
加油哈,好好努力,为了黑马




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