warning C4244: '=' : conversion from 'int' to 'float', possible loss of data

来源:互联网 发布:剑桥 知乎 编辑:程序博客网 时间:2024/06/07 02:50

在32位平台上,通常int是4字节长度,最多表示到21亿多,而int型是“绝对精确”的,换句话说,就是int行最多可以保证10位十进制有效数字的精确度。

 

而float只能保证6位有效数字的精确度,因此int到float的转换是可能丢失精度的,比如整数“1234567899”转换成float后,大约是:1.23457936乘10的9次方,也就是从第7位有效数字开始已经不准确了。

 

double可以保证15位10进制有效数字的精度,所以从int到double不会有这个警告。

 

在32位平台上,通常int和float都是4字节的,那既然字节数一样,凭什么int只能表示到21亿,而float可以表示到10的38次方?答案就是float跟int相比,牺牲了精确度,换来了更大的表示范围。

0 0
原创粉丝点击