如何在 C 中打印没有额外零数字的浮点数

How to print a float number without extra zero digits in C

当我用“%f”打印一个浮点数时,它打印了一个 6 位数的浮点数,但我不想打印额外的零。我可以使用例如“%.3f”来打印 3 位数字,但我想打印一个带有随机数字的浮点数,使用“%.{number}f”不是我的答案。例如:

#include <stdio.h>
int main()
{
    float a, b;
    printf("Please enter a number: ");
    scanf("%f", &a);
    printf("Please enter another number: ");
    scanf("%f", &b);
    printf("%f", a / b);
    return 0;
}

a/b 可以有偶数位小数。当然,我的问题也适用于double和long double。

这是一段打印 n non-zero 十进制数字的代码:

#include <stdio.h>
#include <math.h>

int main(void)
{
    int n;
    float a, b;
    scanf("%f %f %d", &a, &b, &n);
    float result = a / b;
    printf("%d", (int)result);
    int decimal = (int)trunc(result * pow(10, n)) % (int)pow(10, n);
    if (decimal != 0)
        while (decimal % 10 == 0)
            decimal /= 10;
    printf(".%d\n", decimal);
}

有很多方法可以去除多余的零。

  1. 最简单的方法是在 printf 语句中使用 %g 作为格式说明符。例如。 printf("%g",a/b);。这是删除小数点后多余的零。

  2. 您可以使用printf("%.0d%.4g\n", (int)(a/b)/10, (a/b)-((int)(a/b)-(int)(a/b)%10));

  3. 您可以使用单独的函数来删除多余的零,但这是一个繁琐的过程。先把所有的数字转成字符串,去掉末尾不需要的零。

  4. 您还可以使用 %.2f 格式说明符来减少零。例如。 printf("%.2f",a/b); - 这可以用于您想要打印小数点后的确切位数的地方。 %.<the number of digits to be printed after decimal point>f.