如何使用“%f”以正确的精度将双精度值填充到字符串中

How to use "%f" to populate a double value into a string with the right precision

提问人:AMM 提问时间:9/16/2008 最后编辑:Peter MortensenAMM 更新时间:5/23/2017 访问量:31874

问:

我正在尝试使用这样的双精度值填充字符串:sprintf

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

但精度被削减到小数点后六位。我需要大约 10 位小数来提高精度。

如何实现这一目标?

C 浮点 精度 打印

评论


答:

7赞 Yann Ramin 9/16/2008 #1

你想要的是一个修饰符:

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

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

评论

0赞 Jeremy 9/16/2008
请注意:如果他使用双精度,使用“lf”会更正确吗?
0赞 EvilTeach 11/2/2008
浮点数仅携带大约 6 位精度。使用 %lf 表示双精度。
0赞 Tara 4/23/2016
@EvilTeach:错了。%f 表示双精度。浮点数没有格式说明符。看这个:stackoverflow.com/questions/25860850/......
9赞 Agnel Kurian 9/16/2008 #2

%[宽度]。[精度]

宽度应包含小数点。

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

5 + 1 + 2 = 8

1赞 Jegschemesch 9/16/2008 #3

有关更完整的参考,请参阅维基百科 printf 文章的“printf 格式占位符”部分同一页面上的一个很好的示例

1赞 dajobe 9/16/2008 #4

请注意 - sprintf 的输出将因 C 语言环境而异。这可能是也可能不是你想要的。请参见语言环境文档/手册页中的LC_NUMERIC。

1赞 EvilTeach 9/17/2008 #5

%f用于浮点值。

请尝试改用。它是为双打(以前称为长浮子)设计的。%lf

double x = 3.14159265;
printf(“15.10lf\n”, x);