C round() 函数四舍五入不正确? [关闭]

问题描述 投票:0回答:1

例如在 1140/9 上使用舍入函数时,输出为 126,但 1140/9=126.666666667。输出不应该是127吗? Code

我检查了 round() 的定义,但我看不出它是如何返回 126 而不是 127 的。

c rounding
1个回答
1
投票

不——你使用了整数除法! (你说你有

1140/9
它将两个整数相除,产生一个整数结果。)除法的整数结果被转换为
double
因为
round()
的原型表明这是传递给
round()
的正确类型, 并且该函数返回整数结果的浮点等效值。尝试
1140.0/9.0
——然后你会得到你期望的结果。您可以为分子或分母或两者使用浮点数——所有这些都会产生浮点结果。

#include <math.h>
#include <stdio.h>

int main(void)
{
    printf("Integer  division: %d;        Rounded: %f\n", 1140/9, round(1140/9));
    printf("Floating division: %f; Rounded: %f\n", 1140.0/9.0, round(1140.0/9.0));
    return 0;
}

输出:

Integer  division: 126;        Rounded: 126.000000
Floating division: 126.666667; Rounded: 127.000000

这里有一个更好的演示:

#include <math.h>
#include <stdio.h>

int main(void)
{
    double v1 = 1140 / 9;
    double v2 = round(1140 / 9);
    double v3 = 1140.0 / 9.0;
    double v4 = round(1140.0 / 9.0);
    printf("Integer  division: %f; Rounded: %f\n", v1, v2);
    printf("Floating division: %f; Rounded: %f\n", v3, v4);
    return 0;
}

输出:

Integer  division: 126.000000; Rounded: 126.000000
Floating division: 126.666667; Rounded: 127.000000
© www.soinside.com 2019 - 2024. All rights reserved.