操作符*运算结果为什么会这样啊

#include<stdio.h>
int main()
{
float a = 9.1* 2;
printf("%f", a);
return 0;
}
问一下,为什么输出的结果不是18.200000,而是18.200001啊

浮点数设有精度。
看一小段C语言程序:

int main()

{

float x = 1.3;

x = x - (int)x;

int i = (int)(x*10);

return ;

}

在你心目中, 变量 I 是怎样的结果?

如果你理所当然地认为是3的话, 那么你就错了~~~

实际结果应该是2. 为什么?

简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999......

因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

#include<stdio.h>
int main()

{
    double x = 1.0000003;

    x = x - (int)x;

    int i = (int)(x * 10000000);
    printf("%d", i);
    return;

}

浮点数都有精度,只是double类型更精确些,当数据足够小时,结果仍然为2,并非float特性

把脚本中的float改成双精度double就可以了,这应该是float的特性问题吧