不同的浮点输入和输出

时间:2013-10-17 07:30:27

标签: c floating-point floating-accuracy

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

输出:100.099998

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

1 个答案:

答案 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更准确。