使用printf打印double类型变量的任意位数

7

是否可以使用printf来打印可变的数字?

以下代码将仅打印数字2:

printf("%.2lf", x);

但是假设我有一个变量:

int precision = 2;

有没有一种方法可以在printf中指定数字的位数?
否则我就得写一个“switch”或“if”结构。
谢谢。

注意:"%.2lf" 打印小数点后 2 位数字(3 将打印为 3.00)。 - user6547518
4个回答

10

可能性存在:

#include <stdio.h>

int main() {
    int precision = 3;
    float b = 6.412355;
    printf("%.*lf\n",precision,b);
    return 0;
}

1
对于精度问题,没关系,你的答案很好。谢谢。 - pHbits

8
是的,您可以轻松地完成这个操作 -
int precision = 2;
printf("%.*lf", precision, x);

谢谢。这正是我所期望的。我已经使用C语言很多年了,但不知怎么就错过了这个小技巧。 - pHbits
如果您想执行类似于digits=log10(something)+1的操作,并制作可以正确排序的文件名,例如提供给ffmpeg并使它们按数字顺序排列,这也变成了ASCII顺序,则此方法非常有用。 - Alan Corey

4

2
如果您使用C++,可以使用setprecision:
#include <iostream>
#include <iomanip>      // std::setprecision

int main () {
    int precision = 2;
    double f =3.14159;

    std::cout << std::setprecision(precision) << f << '\n';
    ++precision;
    std::cout << std::setprecision(precision) << f << '\n';

    return 0;
}

输出

3.1
3.14

你可以在这里阅读更多关于它的内容:这里

ANSI C - 不是 C++。还是谢谢你。 - pHbits
2
@user2737130 您的问题被标记为 C++。如果您正在使用 C,请不要将问题标记为 C++,这会导致许多无法使用的答案。 - olevegard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接