使用浮点值我不知道为什么我的C编译器或系统出现意外行为。没有让它如此混乱。这是一个简单的程序,用于获取浮点值输入并打印相同的内容。
#include <stdio.h>
int main()
{
float num;
printf("Enter float value ");
scanf("%f", &num);
printf("Value = %f", num);
return 0;
}
在同一代码的多次运行中给出了不同的和奇怪的输出。以下是一些示例运行。
示例运行#1 正确输出
输入浮动值12.0312
值= 12.031200
示例运行#2 错误且意外的输出
输入浮动值324.123
值= 324.122986
示例运行#3 错误且意外的输出
输入浮动值945.1234
值= 945.123413
我不知道为什么系统最后会添加一些垃圾值。我在code :: blocks中使用GNU GCC编译器。
答案 0 :(得分:3)
您的float
无法准确代表所有可能的数字。它有局限性。距离float
"324.123"
最近的324.122986...
是double
如果您需要更高的精确度,请使用float
,但即使这样也有其限制。
FLT_DIG
对于至少FLT_DIG
重要位数是正确的(匹配类似限制的输入)。要将数字打印到printf("%.*e", FLT_DIG - 1, num);
有效数字,请使用:
FLT_DIG
find
至少为6.
十进制数字的数量q,这样任何带有q个十进制数字的浮点数都可以舍入为p个基数为b的浮点数,然后再返回而不更改为q个十进制数字,... C11dr §5.2.4.2.211
答案 1 :(得分:0)
printf("Value = %f", num);
如果喜欢,它会增加一些价值: 输入浮点值945.1234 值= 945.123413
因为浮点值始终在小数点后打印6位数
要避免这种情况,您可以使用如下语句: printf(“Value =%。3f”,num);
这会给你一个你想要的欲望输出 它只会在小数点后打印三个数字 你可以按照你的要求设置 “%。2f” - &gt;小数点后的2位数 “%。3f” - &gt;小数点后的3位数 “%。4f” - &gt;小数点后的4位数