public class Num {
public static void main(String[] args){
double a = 1.1;
double b = 1.1;
double c = a * b;
System.out.println(c);
}
}
想知道为什么此段代码的 运行结果 为1.2100000000000002求解!

解决方案 »

  1.   

    double类型输出的时候都这样吧 我记得我问过  我同学说是正常的  
      

  2.   

    double型不可能无限精确地表达所有小数
    当然,也没有哪个别的类型可以做到这一点,只有做到何种近似程度的区别
      

  3.   

    昨天也有个人问类似的问题。答案是:“都是二进制惹得祸”。不过3楼说的也是对的:如果在限定的小数位数范围内,可以通过特定算法来实现精确表达。但想精确表达无限的小数位数范围是做不到的。专业的数学工具,如Matlabs和Mathematica会采用符号运算的方式强化运算精度,但依然不可能做到无限制的保证。昨天某人类似问题的帖子:
    http://topic.csdn.net/u/20120107/14/0c0f2ee9-d141-48f0-8c36-6d5a0db4c5b5.html
      

  4.   

    java有专门处理这种高精度运算的类 JAVA.math.BigInteger和java.math.BigDecimal
      

  5.   

    但是 问题是 1.1*1.1  应该等于1.21  我不太明白 为什么  在C#中  得出的值为 1.21 但是 放到JAVA中 值却变为 1.2100000000000002  了 谁能解释下吗?
      

  6.   

    double类型是16位基本类型,所以最后的结果是16位表示