月经贴又来了。用浮点数吧System.out.println((2.0f-1.1f)==0.9f);

解决方案 »

  1.   

    精度跟语言无关。
    float/double:有限的空间(如64位)表示无限的数据(一个区间小数是无限的)必然存在精度问题。下面就不会错了,注意数字都是字符串。不要传float。
    BigDecimal d1 = new BigDecimal("2.0") ;
    BigDecimal d2 = new BigDecimal("1.1") ;
    BigDecimal d3 = new BigDecimal("0.9") ;
    d1 = d1.subtract(d2);
    System.out.println(d1.equals(d3));
      

  2.   


    你这个有问题,如果是这样
    System.out.println((2.0001f-1.1001f) == 0.9f);
    BigDecimal d1 = new BigDecimal("2.0001") ;
    BigDecimal d2 = new BigDecimal("1.1001") ;
    BigDecimal d3 = new BigDecimal("0.9") ;
    d1 = d1.subtract(d2);
    System.out.println(d1);
    System.out.println(d1.compareTo(d3)); // 发现equals也不行。会存在0.90 !=0.9