中易网

int 转 float 为什么有时会丢失精度

答案:3  悬赏:80  
解决时间 2021-02-03 19:25
在java中
最佳答案
int是整型,用来表示整数,其值是精确值。

float是浮点型,用来表示实数,其值是近似值。
所以当int转换为float时,是由准确值变成了近似值,所以会丢失精度。
比如int 的1000,转换为浮点型时,可能会被存成1000.00000000001,用来计算或者输出时看不出区别,实际上是已经有变化了。


在32位和64位的编译器中,int和float都是占四字节。

int可以表示范围为-2147483648~2147483647。
float可以表示-3.40E+38 ~ +3.40E+38。
从这个角度上看,float可以表示的范围比int的大太多了,对于比较大的数值,自然就会差距越大。
比如下面的代码
int main()
{
int a = 2147483000;
float b = a;
printf("%f\n",b);
return 0;
}在gcc下输出

2147483008.000000
与原本值已经相差了8。
全部回答
比如说 原先的数值为 3.5 你转换成整型后为 3了 后面的小数位就没有了,当然会丢失精度了。
float和double只是位数不一样,对浮点数的表示方式都是一样的。float会损失精确,doube必然也会损失精度。 补充: java 的浮点类型都依据 ieee 754 标准。ieee 754 定义了32 位和 64 位双精度两种浮点二进制小数标准。 ieee 754 用科学记数法以底数为 2 的小数来表示浮点数。 对于32 位浮点数float用 第1 位表示数字的符号,用第2至9位来表示指数,用 最后23 位来表示尾数,即小数部分。 float(32位): 对于64 位双精度浮点数,用 第1 位表示数字的符号,用 11 位表示指数,52 位表示尾数。 double(64位): 都是分为三个部分: (1) 一个单独的符号位s 直接编码符号s 。 (2)k 位的幂指数e ,移码表示 。 (3)n 位的小数,原码表示 。 当下面情况出现是则无法精确表示: 1.幂数不够表示了:这种情况往往出现在数字太大了,超过幂数所能承受的范围,那么这个数字就无法表示了。如幂数最大只能是10,但是这个数字用科学计数法表示时,幂数一定会超过10,就没办法了。 2.尾数不够表示了:这种情况往往出现在数字精度太长了,如1.3434343233332这样的数字,虽然很小,还不超过2,这种情况下幂数完全满足要求,但是尾数已经不能表示出来了这么长的精度。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
骁龙615内存带宽是多少?
简答题与所审计期间各类交易和事项相关的认定
驮押屯地址有知道的么?有点事想过去
我的脚背被开水烫伤三天为什么脚背会肿?有什
女生来大姨妈时很难受吗?作为一个男生,应该
mini itx能用ATX的电源吗
果新鲜沟口店在哪里啊,我有事要去这个地方
ppt被上一层覆盖后的内容怎么修改
为什么手机像素比相机高,却还是不如相机
我农村户口,是1992年上的户口,因为我是和姥姥
小南营子地址在什么地方,想过去办事
蕃茄能和鱼一起煮吗是否降低鱼的莒营养
时之沙皮肤来源于那部电影
皓泰石油物资供应公司在什么地方啊,我要过去
比喻没有那么大本事就不要做那么大的事的谚语
推荐资讯
金穗驾校市体育场报名联络点怎么去啊,有知道
谁有像'秋天不回来'那种类型的歌儿
在韩国电视剧中哪个男演员最会演哭? 就是能他
我想给贫困儿童写封信.但我组织能里不好.希望
苹果5s拍摄时手电筒能不能同时开
包头有厨师学校吗?有蛋糕技术的培训吗?
安阳市润豫商贸有限公司在哪里啊,我有事要去
itunes安装异常,无法启动
1984年农历12月28日7点生人五行
上海的阿迪达斯专卖静安寺附近有吗?
求穿越到琅琊榜的小说,女主要多,什么霓凰,
苏州防火设备厂这个地址在什么地方,我要处理
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?