如何使您的除数结果不四舍五入?

时间:2018-10-14 10:57:46

标签: c

示例(在C中):

#include<stdio.h>

int main()
{
    int a, b = 999;
    float c = 0.0;
    scanf("%d", &a);
    c = (float)a/b; 
    printf("%.3lf...", c);
    return 0;
}

如果我输入998,它将得出0.999,但我希望结果为0.998;怎么样?

1 个答案:

答案 0 :(得分:2)

您似乎想截断而不是舍入。

999/998的数学结果为0.9989989989 ...四舍五入到小数点后三位,即 为0.999。因此,如果您使用%.3f进行打印,那将是您要得到的。

在C中将浮点数转换为整数时,小数部分将被截断。因此,如果您拥有数字998.9989989并将其转换为int,则将得到998。因此,您可以通过乘以1000,截断为int然后再除以1000来获得所需的结果:

c = c * 1000;
c = (int)c;
c = c / 1000;

或者您可以将其缩短为

c = (int)(c * 1000) / 1000.;

这对于诸如998/999≈0.998之类的问题将很好地工作,但是您接近类型float的有限精度将开始引入自己的舍入问题的边缘。使用double是更好的选择。 (类型float的有限精度几乎总是会引入问题。)