示例(在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;怎么样?
答案 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
的有限精度几乎总是会引入问题。)