float amount;
printf("Enter the amount:\n");
scanf("%f", &amount);
// input: 100.10
printf("%f", amount);
输出:100.099998
问题是输出与输入不同 100.10;
float amount;
printf("Enter the amount:\n");
scanf("%f", &amount);
// input: 100.10
printf("%f", amount);
输出:100.099998
问题是输出与输入不同 100.10;
浮点数 like100.10
没有精确的二进制表示。这就是您遇到舍入错误的原因。
注意后面还有一些东西,%f
inprintf
实际上需要一个double
参数,所以这里在调用amount
中转换为。double
printf
原因是,可变参数函数printf
总是提升它们的可变参数部分,这就是为什么printf
没有格式说明符 for float
,因为它总是看到double
. 所以一个更好的程序来证明你的问题是使用double
:
double amount;
printf("Enter the amount:\n");
scanf("%lf", &amount);
printf("%f", amount);
你仍然会得到舍入错误,但没有完成从float
todouble
的转换。为了演示该程序,您可能需要打印更多的数字,因为这样double
更准确。