【问题标题】:Force printf to display a determined number of digits and remove remaining 0s [duplicate]强制 printf 显示确定的位数并删除剩余的 0 [重复]
【发布时间】:2017-01-11 14:16:54
【问题描述】:

我不知道如何告诉 printf 以可变精度打印双精度。

我实际上在做什么:

int main(void)
{
    int digits = 4;

    printf("%0.*f\n", digits, 0.123456789);
    printf("%0.*f\n", digits, 5.9);

    return (0);
}

我实际上有带有 * 和数字变量的变量精度,但它仍然在最后一个数字之后打印剩余的 0。

为了说明我的问题,这是我得到的:

0.1234
5.9000

这就是我想要的:

0.1234
5.9

你能帮帮我吗?

【问题讨论】:

    标签: c printf precision


    【解决方案1】:

    您需要使用%g 而不是%f

    #include <stdio.h>
    
    int main(void)
    {
        int digits = 4;
        printf("%0.*g\n", digits, 0.123456789);
        printf("%0.*g\n", digits, 5.9);
    
        return 0;
    }
    

    输出:

    0.1235 
    5.9
    

    LIVE DEMO

    【讨论】:

    • 我已经试过了,但效果不是很好,如果我用digits = 29测试我得到这个输出:1.2345678899999998900938180668
    • @ChrisProlls 那是因为确切的数字是0.12345678899999999733605449137030518613755702972412109375。这是最接近0.123456789double 号码。
    • @ChrisProlls -- 还要注意 double 没有 29 位精度。
    • 我以为您要求“打印具有可变浮点精度的双精度数。”
    • @ChrisProlls 几乎不需要打印具有超过 DBL_DECIMAL_DIG(通常为 17 个)有效数字的 doubleRef.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多