8

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

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

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

4

2 回答 2

11

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

  sprintf(myNumber,"%*.*lf",A,B,a);

注意:A并且B需要是 type int。从C11标准,第 §7.21.6.1 章,fprintf()功能

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

于 2015-06-23T09:10:30.603 回答
4

是 - 您使用“*”,例如

sprintf(mynumber, "%.*lf", 2, a);

http://linux.die.net/man/3/sprintf

于 2015-06-23T09:10:35.673 回答