使用浮点值时,我不知道为什么我的 C 编译器或系统表现异常。不让它变得如此困惑。这是一个简单的程序,用于获取浮点值输入并打印相同的值。
#include <stdio.h>
int main()
{
float num;
printf("Enter float value ");
scanf("%f", &num);
printf("Value = %f", num);
return 0;
}
多次运行相同的代码会给出不同且奇怪的输出。以下是一些示例运行。
示例运行 #1 正确输出
Enter float value 12.0312
Value = 12.031200
示例运行#2 不正确且意外的输出
Enter float value 324.123
Value = 324.122986
示例运行 #3 不正确且意外的输出
Enter float value 945.1234
Value = 945.123413
我不知道为什么系统在最后添加了一些垃圾值。我在 code::blocks 中使用 GNU GCC 编译器。
最佳答案
您的float
无法准确表示每个可以想象的数字。它有局限性。与 "324.123"
最接近的 float
是 324.122986...
如果您需要更高的精度,请使用double
,但即使这样也有其局限性。
float
将是正确的(匹配类似的有限输入)至少 FLT_DIG
有效位。要将数字打印为 FLT_DIG
有效数字,请使用:
printf("%.*e", FLT_DIG - 1, num);
<小时/>
FLT_DIG
至少为 6。
number of decimal digits, q, such that any floating-point number with q decimal digits can be rounded into a floating-point number with p radix b digits and back again without change to the q decimal digits, ... C11dr §5.2.4.2.2 11
关于c - 浮点值输入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231088/