2 c wangbin c_wangbin 于 2016.09.08 14:30 提问

关于 int float double 的 == 比较问题

int i = 6;
float i2 =6.0000f;
float f = 6.0008F;
double d = 6.0008D;
if(i==i2){
System.out.println("Hello");
}
if(f==d){
System.out.println("nihao");
}

    结果:只输出 Hello   不输出 nihao

4个回答

qq_29594393
qq_29594393   Ds   Rxr 2016.09.08 17:36
已采纳

你要去了解一下浮点数在计算机中表示的原理,不然你是理解不了这个东西的,这就是问什么大多数时候都是int 型 ,或者使用整形数组来进行大数的运算
http://blog.csdn.net/iloli/article/details/8447571

c_wangbin
c_wangbin 谢谢
大约一年之前 回复
hijack00
hijack00   Rxr 2016.09.08 17:51

浮点数不能使用==进行比较,应该使用abs(x1-x2)<eps判断x1和x2是否相等(其中eps为一个很小的正数,如1e-5)

c_wangbin
c_wangbin 谢谢
大约一年之前 回复
bdmh
bdmh   Ds   Rxr 2016.09.08 14:43

浮点数有特殊的存储方式,多数都不能精确表示,所以用 == 判断是否相等就不合适了,你可以把两个数做差,差值小于一定范围视为相等

c_wangbin
c_wangbin 谢谢
大约一年之前 回复
caozhy
caozhy   Ds   Rxr 2016.09.08 14:59

浮点数存在进制转换误差,只有小数是0.5 0.25 0.125 0.0625...以及它们的和(比如0.75=0.5+0.25)等等才能精确表示。
比如
float f = 6.125F;
double d = 6.125D;
这样比较才能相等。
像6.0008,转换为二进制,结果是无限小数,所以double和float当然不等了。

c_wangbin
c_wangbin 谢谢
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!