开发者社区> 问答> 正文

float类型精度问题

我自己编写那个摄氏转华氏的计算如下:

nclude

void main()
{
float c, f; printf("Please enter a C: n");
scanf("%f",&c);
f = 1.8*c + 32;
printf("F is:%f",f);
}
但是,当我输入25.8时,结果给的是78.440002% 想问一下,为什么会多出来最后那个0002和最后的%。?

展开
收起
a123456678 2016-03-09 16:23:56 2562 0
1 条回答
写回答
取消 提交回答
  • 主要的问题是计算机使用的是二进制表示数据:

    二进制的 0.1 是十进制的 0.5
    0.1 <=> 0.5
    0.01 <=> 0.25
    0.001 <=> 0.125
    .....
    但是当我们表示十进制的 0.8的时候就出了问题
    0.8 = 0.5 + 0.25 + 0.03125 + 0.01526 + ... 所以表示成二进制是0.11001100... 这个是无限长的。但是计算机只能表示成有限长的,比如是 0.110011 这个有限的二进制再转换成我们习惯的十进制时就是 0.796875,也就是说我们想保存0.8 但是其实计算机保存的是0.796875(计算机可能保存的二进制数据更长,也只不过是更精确罢了),所以就出现了你代码中的情况。

    解决的方法就是不要输出计算结果取个近似就好了,如果你需要更大的精度就用更大精度的浮点数。
    你需要记住的的是计算机保存浮点数的时候是不精确的就好了。

    2019-07-17 18:56:24
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载