【问题标题】:Float value showing incorrectly [duplicate]浮点值显示不正确[重复]
【发布时间】:2023-03-28 11:25:01
【问题描述】:

当我编写一个使用浮点数读取和打印数字的简单程序时,我遇到了一些意想不到的结果。

在下面的程序中,当我输入一个数字 100.62 时,我得到的结果是 100.620003。该值最多只能正确显示八位数。即使我尝试了不同的数字,问题仍然存在。为什么是这样?除了限制小数点之外,有没有办法克服这个问题。

还有没有办法按原样打印数字? IE;如果我输入 100.62 它应该打印 100.62 如果输入 100.623 它应该打印 100.623(不是 100.620000 和 100.623000)。

int main (void)
{
    float i;
    printf ("Enter a number : ");
    scanf ("%f", &i);
    printf ("You entered the number : %f", i)
    return 0;
}

【问题讨论】:

标签: c floating


【解决方案1】:

这个问题来自计算机如何处理浮点值。

解决此问题的一种方法是停止使用 float 并将数字作为十进制数据处理。

要按原样打印数字,只需将输入作为字符串读取并打印即可。这种方法非常简单,可以支持1e-100001.00000等难度较大的输入。

【讨论】:

    【解决方案2】:

    据我所知,C 总是默认显示浮点数的完整数字。

    如果您想显示自定义小数点,您应该尝试在 f 表示法之前使用“.x”。 X 是要在点后显示的总数。例如:

    float i;
    printf ("Enter a number : ");
    scanf ("%f", &i);
    printf ("You entered the number : %.2f", i)
    return 0;
    

    这将在点后产生 2 个数字。如果输入 100.62,它将显示为 100.62。然而,这是静态的。我的意思是,如果你输入 100.623,它将显示 100.62,而不是 100.623。您应该确切知道要在点后显示多少个数字。

    【讨论】:

    • 这仅适用于具有 2 小数点后数字的浮点数。一般情况下使用%g 修饰符。
    • 是的,我之前说过,您应该使用 .x 来指定在点之后需要多少个数字 (x)。无论如何感谢您的信息。
    猜你喜欢
    • 2020-02-28
    • 2021-11-02
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多