首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

[300分]求高手:关于double型的求模有关问题?

2012-01-06 
[300分]求高手:关于double型的求模问题??急急急急急急急急急急急急急急急急急急急急急publicclassFloatTes

[300分]求高手:关于double型的求模问题??急急急急急急急急急急急急急急急急急急急急急
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
不知为何是这样如何解释没规律呀???????!
如果可以马上结帖!!!!!!!!!!!!
  


[解决办法]
double类型本来就不是严格精确的,它只是在精度范围内正确。这样很正常。毕竟你是对小数去模啊。考虑人工来算还不是也是这样啊。
[解决办法]
扩大十倍试试
[解决办法]
精度问题.不知道怎么解释.
[解决办法]
二进制不能精确表示1.6,1.8所致
[解决办法]
Up
[解决办法]
用BigDecimal就行了,关键是看你的要求是不是很高
[解决办法]
路过问一下,这样求模有什么意义吗?
[解决办法]
对小数求模有意义么?
尤其是在计算机无法精确表示小数的情况下
[解决办法]
第一回听说,还有对double型求模的,有意义吗?
要求是取整后求吧?
[解决办法]
试一下:
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);

}


[解决办法]
不能精确表示1.6和1.8
[解决办法]
这主要是机器内部数据和开发语言环境时的精度丢失问题,跟java没关系,c也一样

计算机里表示数都是用的IEEE754标准 是2进制数
c语言的double型在计算机内部表示应为 1位数符,11位阶码,52位位数,总共64位构成构成
是一个相当相当精确的数据(并不是完全精确).最大值应该是2的3970次方左右

当数据从机器传递到开发语言环境时,数据需要从一种格式转化为其它的格式。当进行数据转换时,有可能造成数据精度上的丢失。同样,数据从一种类型转换为另一种类型的过程也会影响程序的性能.

有时间你看看这个
http://tag.csdn.net/tag/ieee754/

热点排行