2016-10-22 62 views
2

诠释我在C浮在C意想不到的输出

#include <stdio.h> 

int main() 
{ 

    float a = 1.88; 
    a =a - (0.25 * 7 + 0.1 * 1); 
    a = a *100; 
    printf("a = %f\n",a); 
    int b =(int) (a); 
    printf("b = %d\n", b); 
} 

下面的代码B的值应该是2,但我得到下面的输出 -

a = 3.000000 
b = 2 

为什么会这样呢?

+2

我花了10秒阅读“C浮动转换成int”第一谷歌命中: http://c-faq.com/fp/round.html。你的代码被截断,而不是转换。 –

+1

可能重复[浮点数学是否被破坏?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – EOF

+0

我怀疑你的意思是“b应该是3,但它为什么是2 “?答案在下面给出。 –

回答

7

如果更改

printf("a = %f\n",a); 

printf("a = %.20f\n",a); 

它输出

a = 2.99999952316284179688 

正如你可以看到这是不是3

所以转换将截取2.

0

当float被转换为int时,只存储整数部分,即2.9只存储了2,剩余的被截断。 类似一个处于分裂的情况下

#include<stdio.h> 
main() 
{ 
    int a=12/5; 
    printf("%d\n",a); 
} 

这里的结果是2.4,但.4截断..