关于0.3f不等于0.3的细节

首先0.3f属于float数据类型,0.3属于double数据类型,而float长度为32位,double长度为64位。

在计算机中0.3f与0.3作比较时,需要转换成二进制数后再开始比较

但是0.3f转换成二进制是无线循环的一个值,但是由于精度关系所以会对值进行保留,所以相同的0.3数值会由于float和double精度不同所以精确到的位数不同

 

 通过上图可以看到0.3f和0.3在精确到一定位数后的结果明显不同

这里还需要注意一点,0.3f和0.3进行比较运算时,float会先转换成double数据类型,再与double数据类型的0.3比较

而float数据类型的0.3f 由于舍0入1的关系,导致0.3f的最后一位进1。使得0.3f的值比0.3大,再转换成double数据类型后依然大于0.3。

所以0.3f != 0.3。

posted @ 2020-06-23 20:09  大明湖畔的闰土  阅读(747)  评论(0编辑  收藏  举报