public class Test{
public static void main(String[] args) {
//0 8 92 51.599999999999994
System.out.print(92*0.3);
}
}Compiling Test.java.......
-----------OUTPUT-----------
27.599999999999998[Finished in 3.3s]为什吗会出现这样的运算结果,小数位数为什吗这么多???

解决方案 »

  1.   

    你这么写,一个int类型,一个浮点类型
    Java中,浮点类型是依据IEEE754标准的。IEEE754定义了32位和64位双精度两种浮点二进制小数标准。采用二进制表示double,float等浮点数是不准确的。
      

  2.   

    用BigDecimal就可以了public class Test {
    public static void main(String[] args) {
    BigDecimal bigDecimal1 = new BigDecimal(92);
    BigDecimal bigDecimal2 = new BigDecimal(0.3);
    System.out.print(bigDecimal1.multiply(bigDecimal2).floatValue());
    }
    }
      

  3.   

    int 类型 和 浮点类型 相乘 得出的结果就是浮点类型,浮点类型采取的二进制编码使得小数部分无法完全精确表示,例如0.4 = 0.25 + 0.125 + ...,只能无限接近。所以在对浮点数做计算时会产生精度误差
      

  4.   

    用bigDecimal
      

  5.   

    BigDecimal