-1
float amount;
printf("Enter the amount:\n");
scanf("%f", &amount);
// input: 100.10
printf("%f", amount);

输出:100.099998

问题是输出与输入不同 100.10;

4

1 回答 1

2

浮点数 like100.10没有精确的二进制表示。这就是您遇到舍入错误的原因。

注意后面还有一些东西,%finprintf实际上需要一个double参数,所以这里在调用amount中转换为。doubleprintf

原因是,可变参数函数printf总是提升它们的可变参数部分,这就是为什么printf没有格式说明符 for float,因为它总是看到double. 所以一个更好的程序来证明你的问题是使用double

double amount;
printf("Enter the amount:\n");
scanf("%lf", &amount);
printf("%f", amount);

你仍然会得到舍入错误,但没有完成从floattodouble的转换。为了演示该程序,您可能需要打印更多的数字,因为这样double更准确。

于 2013-10-17T07:49:04.890 回答