浮点型与整形的比较问题
- 目前本人的理解是:
- 与浮点数的存储方式有关
- 有些浮点数在内存中不能准确的保存
- 不能旦旦是你所看到的数字的来进行四舍五入,
- 比如 上面的代码中 2.335 ——》在内存中可能是 2.333499995 的(并不能完全精确的保存),这个数值( 2.333499995 )四舍五入的结果就是 2.33 了
代码:
#include<stdio.h>
/*
* float 与 int 类型比较判断中的问题
*/
int main()
{
int num = 9;
float fnum = 8.99999999F;
if (fnum == num)
{
printf("相等\n");
}
else
{
printf("不相等\n");
}
return 0;
}
结果:
解析:
- 首先 (fnum == num ),一个为float 类型,一个为 int 类型,两个类型不一致
- 存在整形提升,num 先提升为 float 类型,而因为浮点数的存储的原因;
- 精确度有限,其中的准确性,不好百分百确定的
所以不要使用浮点数的值来进行比较判断,以及注意其中存在的类型提升
结尾:
限于自身的水平,其中存在的错误希望大家给予指教,韩信点兵——多多益善,谢谢大家!后会有期,江湖再见!