输入这段代码
public class TestQuestion
{
public static void main(String[] args){
System.out.println(1-0.8);
}
}
编译,运行发现结果根本就不是0.2而是0.199999999996,哪位大虾能解释一下为什么啊?

解决方案 »

  1.   

    这就是计算精度的问题,你可以用BigDicemail。
      

  2.   


    import java.math.BigDecimal;
    import java.math.MathContext;
    public class Test {
    public static void main(String[] args) {
    MathContext mc = new MathContext(1);//设置精度
    BigDecimal bd1 = new BigDecimal(1.0, mc);
    BigDecimal bd2 = new BigDecimal(0.8, mc);
    bd1 = bd1.subtract(bd2);
    System.out.println(bd1.toString());
    }
    }一个简单的例子!
      

  3.   

    是不是浮点数(float、double)不能进行精确的减法
      

  4.   

    如果学了组成原理就能明白
    计算机中的浮点型的值大都是不精确的
    不过JAVA中有高精度类BigDicemail
    很方便
      

  5.   

    (1)JAVA中的小数默认为double类型,一个整形与浮点类型做运算,会有数据类型的提升。
    (2)浮点表示的数不是精确的数,在JAVA中表示精确数必须用BigDicemail