<分区>
案例一
float a = 0.6;
if (a < 0.6)
{
printf("c");
}
else
{
printf("c#");
}
输出c#
案例2
float a = 0.9;
if (a < 0.9)
{
printf("c");
}
else
{
printf("c#");
}
输出c
现在的问题是为什么?
<分区>
案例一
float a = 0.6;
if (a < 0.6)
{
printf("c");
}
else
{
printf("c#");
}
输出c#
案例2
float a = 0.9;
if (a < 0.9)
{
printf("c");
}
else
{
printf("c#");
}
输出c
现在的问题是为什么?
最佳答案
我假设 float 是 IEEE 754 32 位二进制,double 是 IEEE 754 64 位二进制。
最接近 0.6 的 double 值,即文字的实际值,是 0.59999999999999997779553950749686919152736663818359375。将其转换为float的结果是0.60000002384185791015625,稍微大一点。
最接近 0.9 的双倍数是 0.90000000000000002220446049250313080847263336181640625。将其转换为float的结果是0.89999997615814208984375,稍微小一些。
在每种情况下,无法精确表示的小数部分将四舍五入到最接近的 double 以表示文字。它被舍入为一个 float 以分配给 a
,根据舍入到最近的规则,它可能略小于或略大于 double ,或者如果 double 的二进制表示具有很多尾随零。
关于c - 小于(<)float与c中if语句的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24002057/