#include<stdio.h>

int main()
{
    double fract=0;
    int tmp;

    //scanf("%lf",&fract);
    fract=0.312;
    printf("%lf",fract);
    printf("\n\n");
    while(fract>0){
        fract*=(double)10;
        printf("%d ",(int)fract);
        fract-=(int)fract;
    }
    getch();
    return 0;
}

此代码的输出应为:
三百一十二
但有些事情是不对的。。我正在使用devcpp 4.9.9.2编译器。。。

最佳答案

Kernighan&Plauger在他们古老而经典的书中说:
一位聪明的老程序员曾经说过:“浮点数就像一堆沙子;每次移动一个浮点数,就会损失一点沙子,获得一点泥土。”。
他们还说:
10*0.1几乎不是1.0
两种说法都指出浮点运算并不精确。
注意,一些现代CPU(IBM PPC)内置了IEEE754:2008十进制浮点运算。如果使用正确的类型,那么您的计算将是准确的。

关于c - C编译器错误(浮点运算)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4002411/

10-12 20:32