使用sprintf动态设置精度

siw*_*mas 7 c printf format-string

使用sprintf和一般语法"%A.B"我可以这样做:

double a = 0.0000005l;
char myNumber[50];
sprintf(myNumber,"%.2lf",a);
Run Code Online (Sandbox Code Playgroud)

我可以在格式字符串中动态设置A和B吗?

Sou*_*osh 10

是的,你可以这样做.您需要使用星号*作为字段宽度和.*精度.然后,您需要提供带有值的参数.就像是

  sprintf(myNumber,"%*.*lf",A,B,a);
Run Code Online (Sandbox Code Playgroud)

注意:A并且B需要输入int.从C11标准,章节§7.21.6.1,fprintf()功能

......字段宽度或精度或两者都可以用星号表示.在这种情况下,int参数提供字段宽度或精度.指定字段宽度或精度或两者的参数应在要转换的参数(如果有)之前(按此顺序)出现.负字段宽度参数被视为-标志,后跟正字段宽度.如果省略精度,则采用负精度参数.