public class FloatTest {  public static void main(String[] args)

      double  d=18%1.8; 
  System.out.println(d); 
  d=15%1.5; 
  System.out.println(d); 
  d=24%2.0; 
  System.out.println(d);
  d=16%1.6; 
  System.out.println(d);


 在控制台上打印的结果是:
1.7999999999999996
0.0
0.0
1.5999999999999992
不知为何是这样如何解释没规律呀???????!
如果可以马上结帖!!!!!!!!!!!!
  

解决方案 »

  1.   

    double类型本来就不是严格精确的,它只是在精度范围内正确。这样很正常。毕竟你是对小数去模啊。考虑人工来算还不是也是这样啊。
      

  2.   

    如果求b对a的模,建议使用:
    int n = (int)a / b; (此处最好也要处理一下)
    double d = a - b * n;
      

  3.   

    用BigDecimal就行了,关键是看你的要求是不是很高
      

  4.   

    第一回听说,还有对double型求模的,有意义吗?
    要求是取整后求吧?
      

  5.   

    试一下:
            public static void main(String[] args)
    {
    BigDecimal b = new BigDecimal("1.6");
    BigDecimal c = new BigDecimal("16");

    c = c.remainder(b);

    System.out.println(c);

    }
      

  6.   

    这主要是机器内部数据和开发语言环境时的精度丢失问题,跟java没关系,c也一样计算机里表示数都是用的IEEE754标准 是2进制数 
    c语言的double型在计算机内部表示应为 1位数符,11位阶码,52位位数,总共64位构成构成
    是一个相当相当精确的数据(并不是完全精确).最大值应该是2的3970次方左右当数据从机器传递到开发语言环境时,数据需要从一种格式转化为其它的格式。当进行数据转换时,有可能造成数据精度上的丢失。同样,数据从一种类型转换为另一种类型的过程也会影响程序的性能.有时间你看看这个
    http://tag.csdn.net/tag/ieee754/