float f = 4.78f;
System.out.println((int)f);
System.out.println(f - (int)f);结果输出
4
0.7800002
不应该是
4
0.78吗

解决方案 »

  1.   

    float和double型由于二进制计数的根本原因,计算结果会出现误差,所以一般计算的时候使用
    System.out.println(((float)Math.round( (f-(int)f) *100)/100));
      

  2.   

    float、double类型自身的精度问题!
      

  3.   

    浮点运算都会出现你这样的问题的。
    不过好在Java提供了一种机制可以避免出现这种情况,用BegDecimal
      

  4.   


    BigDecimal f = new BigDecimal(7.48);
    BigDecimal i = new BigDecimal(7);
    f = f.subtract(i);
    System.out.println(f.floatValue());
      

  5.   

    round
    public static long round(double a)返回最接近参数的 long。结果将舍入为整数:加上 1/2,对结果调用 floor 并将所得结果强制转换为 long 类型。换句话说,结果等于以下表达式的值: (long)Math.floor(a + 0.5d)特殊情况如下: 如果参数为 NaN,那么结果为 0。 
    如果结果为负无穷大或任何小于等于 Long.MIN_VALUE 的值,那么结果等于 Long.MIN_VALUE 的值。 
    如果参数为正无穷大或任何大于等于 Long.MAX_VALUE 的值,那么结果等于 Long.MAX_VALUE 的值。参数:
    a - 舍入为 long 的浮点值。 
    返回:
    舍入为最接近的 long 值的参数值。
      

  6.   

    浮点数精度问题,float和double都不精确,用BigDecimal,一般的涉及到精确地数字比如银行中存款什么的都不能用float等