C 强制printf显示确定的位数,并删除剩余的0

C 强制printf显示确定的位数,并删除剩余的0,c,printf,precision,C,Printf,Precision,我不知道如何告诉printf以可变精度打印double 我的实际工作是: int main(void) { int digits = 4; printf("%0.*f\n", digits, 0.123456789); printf("%0.*f\n", digits, 5.9); return (0); } 实际上,我有*和digits变量的变量精度,但它仍然打印最后一个数字后剩余的0 为了说明我的问题,以下是我得到的: 0.1234 5.9000 这就

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

我的实际工作是:

int main(void)
{
    int digits = 4;

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

    return (0);
}
实际上,我有*和digits变量的变量精度,但它仍然打印最后一个数字后剩余的0

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

0.1234
5.9000
这就是我想要的:

0.1234
5.9
您能帮我吗?

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


我已经试过了,但是效果不是很好,如果我用数字=29测试,我得到的结果是:1。2345678899999998900938180668@ChrisProlls这是因为准确的数字是0.1234567899999999733605449137030518613755702972412109375。这是最接近于0.123456789的双精度数字。@ChrisProlls-还请注意,双精度数字没有29位精度。我以为您要求打印一个浮动精度可变的双精度数字。@ChrisProlls不需要打印一个超过DBL\u DECIMAL\u的双精度数字,通常是17位有效数字。
#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