【问题标题】:Set precision dynamically using sprintf使用 sprintf 动态设置精度
【发布时间】:2015-09-08 23:55:23
【问题描述】:

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

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

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

【问题讨论】:

标签: c printf format-string


【解决方案1】:

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

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

注意:AB 需要输入 int。来自C11 标准,第 7.21.6.1 章,fprintf() 函数

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

【讨论】:

    【解决方案2】:

    是的 - 你使用“*”例如

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2012-04-09
      相关资源
      最近更新 更多