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

0.5f==0.5 0.3f==0.3,该怎么解决

2012-12-14 
0.5f0.5 0.3f0.30.5f0.5 0.3f0.3 返回值是什么呢?[最优解释]并不是类型不同的问题而是有些小数无

0.5f==0.5 0.3f==0.3
0.5f==0.5 0.3f==0.3 返回值是什么呢?
[最优解释]
并不是类型不同的问题

而是有些小数无法用float或double精确表示的问题

比如0.x是一个无法用二进制精确表示的数

那么,float a = 0.x实际保存的可能是0.x.......10983,也就是说后面还有数字
double的话同是如此,但double的位数更多

所以,这样用==来比较肯定不相等

一般程序中,是很少用float,double直接==比较的,如果不可避免这两种类型的比较,一般采用减法来做,如
if(a-b<0.000001) {
//就表示两者相等,精度自己控制
}
[其他解释]
false
长度6的字串
[其他解释]
0.5f==0.5  结果:false
0.3f==0.3  结果:false

0.3再没指定精度时,默认是双精度(d),而f是单精度,两者是不同的类型,所以不等。
[其他解释]

引用:
0.5f==0.5  结果:false
0.3f==0.3  结果:false

0.3再没指定精度时,默认是双精度(d),而f是单精度,两者是不同的类型,所以不等。


可是运行结果不是这样的
[其他解释]
0.5f==0.5 应该是ture吧?比较是二进制吧?
[其他解释]
0.5这个比较特殊。
[其他解释]
引用:
0.5这个比较特殊。

你也可以试下1.0
[其他解释]
0.5是2的-1次方
[其他解释]
从运行结果中再去分析
[其他解释]
两个都是false哈,这里唯一的隐藏问题是,默认情况下 小数点在java中是 double 的,
就像默认的 整数是int 类型,不是short 或者byte等。
所以,要让JVM能识别我们制定的类型,就要进行强制类型转换。就像 
如:
方式一:float f = 0.3f (0.3F)
或者
方式二:float f = (float)0.3
[其他解释]
引用:
并不是类型不同的问题

而是有些小数无法用float或double精确表示的问题

比如0.x是一个无法用二进制精确表示的数

那么,float a = 0.x实际保存的可能是0.x.......10983,也就是说后面还有数字
double的话同是如此,但double的位数更多

所以,这样用==来比较肯定不相等

一般程序中,是很少用float,……

+1
[其他解释]
咋这个问题到现在还没结贴哦···LZ还不知道么
[其他解释]
lz
感觉这种问题没有实用性哦

[其他解释]
10楼正解。
与类型无关,而是真正的2进制表示。
              System.out.println(0.5f == 0.5);    
   System.out.println(0.3f == 0.3);
   System.out.println(0.25f == 0.25);
   System.out.println(5f == 5);
结果是 true  false true  true
------------------------------------------------
     回复一帖,10分到手。菜鸟路过,学习快乐。

热点排行
Bad Request.