【问题标题】:How to use "%f" to populate a double value into a string with the right precision如何使用“%f”将双精度值填充到具有正确精度的字符串中
【发布时间】:2010-09-09 08:14:57
【问题描述】:

我正在尝试使用 sprintf 填充具有双精度值的字符串,如下所示:

sprintf(S, "%f", val);

但是精度被截断到小数点后六位。精度需要大约 10 位小数。

如何实现?

【问题讨论】:

    标签: c floating-point precision printf


    【解决方案1】:

    %[宽度].[精度]

    宽度应包括小数点。

    %8.2 表示 8 个字符宽;点前 5 位,后 2 位。该点保留一个字符。

    5 + 1 + 2 = 8

    【讨论】:

      【解决方案2】:

      你想要的是一个修饰符:

      sprintf(S, "%.10f", val);
      

      man sprintf 将提供有关格式说明符的更多详细信息。

      【讨论】:

      • 请注意:如果他使用双精度,使用“lf”会更正确吗?
      • 浮点数只携带大约 6 位数的精度。使用 %lf 作为双精度数。
      • @EvilTeach:错了。 %f 用于双打。浮点数没有格式说明符。看到这个:stackoverflow.com/questions/25860850/…
      【解决方案3】:
      【解决方案4】:

      注意 - sprintf 的输出会因 C 语言环境而异。这可能是也可能不是您想要的。请参阅区域设置文档/手册页中的 LC_NUMERIC。

      【讨论】:

        【解决方案5】:

        %f 用于浮点值。

        尝试改用%lf。它是为双精度而设计的(以前称为长浮点数)。

        双倍 x = 3.14159265;
        printf("15.10lf\n", x);

        【讨论】:

          猜你喜欢
          • 2017-02-23
          • 2014-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多