float amount;
printf("Enter the amount:\n");
scanf("%f", &amount);
// input: 100.10
printf("%f", amount);
输出:100.099998
问题是输出不是100.10与输入相同;
答案 0 :(得分:2)
像100.10
这样的浮点数没有精确的二进制表示。这就是你遇到舍入错误的原因。
请注意,还有更多内容,%f
中的printf
实际上需要double
参数,因此此处amount
会转换为double
{1}}致电。
原因是,像printf
这样的可变参数函数总是提升它们的变量参数部分,这就是printf
没有printf
的格式说明符的原因,因为它总是看到float
。因此,更好地展示您的问题的计划是使用double
代替:
double
您仍会收到舍入错误,但未完成从double amount;
printf("Enter the amount:\n");
scanf("%lf", &amount);
printf("%f", amount);
到float
的转换。为了演示该程序,您可能需要打印更多数字,因为double
更准确。