关于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。

原文地址:https://www.cnblogs.com/heureuxl/p/13184214.html