浮点值输入错误

时间:2015-08-26 15:44:43

标签: c floating-point

使用浮点值我不知道为什么我的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编译器。

2 个答案:

答案 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位数