c语言中float 的问题
我不明白为什么21.29在%f中会变成21.290001,不是应该是21.290000吗?没有什么钱,见谅...
我不明白为什么21.29在%f中会变成21.290001,不是应该是21.290000吗?
没有什么钱,见谅 展开
没有什么钱,见谅 展开
3个回答
展开全部
浮点数是按照IEEE754标准的付点表示法存储的,关于具体的内容,可以自行百度。
造成这个问题的原因是,并不是每个十进制小数都能表示成有限位数的二进制小数,也就是有无限循环小数(二进制)的存在。例如,0.4就无法表示成有限位数的二进制小数(表示为无限循环小数0.0110 0110 0110 ......)。
正如十进制中无法用有限位数表述出1/7一样,二进制小数同样也有很多无法用有限位数表示的数。
如果我们使用7进制的话,1/7则可以表示为0.1,成为了有限小数。
所以,浮点数是不精确的数,在实际应用中,不能比较两个浮点数是否相等,而要比较差值在某个允许的范围内。
造成这个问题的原因是,并不是每个十进制小数都能表示成有限位数的二进制小数,也就是有无限循环小数(二进制)的存在。例如,0.4就无法表示成有限位数的二进制小数(表示为无限循环小数0.0110 0110 0110 ......)。
正如十进制中无法用有限位数表述出1/7一样,二进制小数同样也有很多无法用有限位数表示的数。
如果我们使用7进制的话,1/7则可以表示为0.1,成为了有限小数。
所以,浮点数是不精确的数,在实际应用中,不能比较两个浮点数是否相等,而要比较差值在某个允许的范围内。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
浮点数是不精确的数,在实际应用中,不能比较两个浮点数是否相等,而要比较差值在某个允许的范围内。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询