回 帖 发 新 帖 刷新版面

主题:发现了一个奇怪的问题,不能理解

在调这个程序的时候发现了一个奇怪的问题:
代码

   1. package org.kangsg219.test;  
   2.   
   3. public class Test {  
   4.   
   5.       
   6.     public static void main(String[] args) {  
   7.         double n1=0.89,n2=0.20,n3=0.10;  
   8.         System.out.println(n1+n2+n3);  
   9.         System.out.println(n1+n3+n2);  
  10.     }  
  11.   
  12. }  


运行的结果是:
1.1900000000000002
1.19
为什么不相等呢?仅仅是相加顺序不同而已,怎么会这样?不理解,知道的网友请赐教!

回复列表 (共2个回复)

沙发


是很奇怪啊,我试过了,当只有两个变量时,编译出来的是两个数相等的,可三个数时就不一样了,还真奇怪啊

板凳

因为double是双精度浮点型,它本身是并不精确的。而int等整型才是真正精确的数据类型。比如你给a 赋值为 0.89,其实0.89被a接收到后,真正的值并不是精确的0.89,后面还有若干个零,就比如你所看到的运行结果。
正因为浮点数据类型的不精确性,所以它们不能应用于switch的测试表达式。

我来回复

您尚未登录,请登录后再回复。点此登录或注册