1

我有一个小程序:

int main(int argc, const char * argv[])
{

    float num1;
    float num2;

    num1 = 21.2;
    num2 = 13.6;

    double sum;

    sum = num1 + num2;

    printf("The sum of two numbers is %3.5f. \n", sum);


    return 0;
}

当它打印到控制台时,这就是我得到的:

两个数之和是34.800003

为什么我在小数点后得到 3?试图理解Printf,但这对我来说很神秘......

4

3 回答 3

0

它与数字的精度有关。如果您对详细信息感兴趣,我建议您查看Wikipedia。它们存储的格式仅在一定程度上是准确的。

要获得更高的精度,请使用以下double类型:

int main(int argc, const char * argv[])
{

    double num1;
    double num2;

    num1 = 21.2;
    num2 = 13.6;

    double sum;

    sum = num1 + num2;

    printf("The sum of two numbers is %3.5f. \n", sum);


    return 0;
}
于 2013-04-14T18:03:08.010 回答
0

c 中的每件事都是按位完成的,只需打印 num1 和 num2 的十六进制值。您缺少的是 0.2 和 0.6 无法在 cu 中精确定义无法在 c 中获得正确的位。在 c 中,小数点是用 2 的负数计算的。从十进制到二进制的转换低于 2^-1*b1+2^-2*b2+2^-3*b3 这就是 c 计算浮点数的方式在c。

于 2013-04-14T19:42:15.643 回答
0

使用双精度进行加法:

sum = num1;
sum += num2;

或应用一些铸造:

sum = (double) num1 + (double) num2;
于 2013-04-14T18:00:21.497 回答