已编辑,正如保罗指出的那样,10.0 可能不是解释这一点的正确示例。
使用浮点数时,您不能不安全地使用 == < 或 > 运算符。原因是输入为 1.1 的数字在使用非整数类型时不会是 1.10000000000000000。因此,定义一定的误差阈值增量,它可以是两个最近的浮点数之间的最佳分辨率。因此,如果您的 10 是计算值而不是硬编码,则 float ten=getXX(someinput); 假设 getXX() 根据一些计算返回一些结果 float 百=getXX(someinput);
然后像 K > (ten-delta) && K < (hundred+delta) 那样做比较
我相信这应该足够了。
所以,千万不要在没有小的纠错因子的情况下对浮点数/双精度数进行关系运算!
这是一个片段来演示它http://ideone.com/dxS9OI
#include <stdio.h>
int main(void) {
float eleven=11.0;
float one_dot_1=1.1;
float elevenUsingSummation = 0;
int i=0;
for(i=0; i<10; i++)
{
elevenUsingSummation+=one_dot_1;
}
printf("------------------------------\n"
"Floating point testing example \n"
"one_dot_1(2.10)=%2.10f, one_dot_1(2.20)=%2.20f\n"
"eleven(2.10)=%2.10f, eleven(2.20)=%2.20f\n"
"elevenusingsubmission(2.10)=%2.10f, elevenusingsubmission(2.20)=%2.20f\n"
"(elevenUsingSummation==eleven) evaluates to %s\n",
one_dot_1, one_dot_1, eleven, eleven, elevenUsingSummation, elevenUsingSummation,
elevenUsingSummation==eleven?"True":"False"
);
return 0;
}