【发布时间】:2010-09-09 08:14:57
【问题描述】:
我正在尝试使用 sprintf 填充具有双精度值的字符串,如下所示:
sprintf(S, "%f", val);
但是精度被截断到小数点后六位。精度需要大约 10 位小数。
如何实现?
【问题讨论】:
标签: c floating-point precision printf
我正在尝试使用 sprintf 填充具有双精度值的字符串,如下所示:
sprintf(S, "%f", val);
但是精度被截断到小数点后六位。精度需要大约 10 位小数。
如何实现?
【问题讨论】:
标签: c floating-point precision printf
%[宽度].[精度]
宽度应包括小数点。
%8.2 表示 8 个字符宽;点前 5 位,后 2 位。该点保留一个字符。
5 + 1 + 2 = 8
【讨论】:
你想要的是一个修饰符:
sprintf(S, "%.10f", val);
man sprintf 将提供有关格式说明符的更多详细信息。
【讨论】:
注意 - sprintf 的输出会因 C 语言环境而异。这可能是也可能不是您想要的。请参阅区域设置文档/手册页中的 LC_NUMERIC。
【讨论】:
%f 用于浮点值。
尝试改用%lf。它是为双精度而设计的(以前称为长浮点数)。
双倍 x = 3.14159265;
printf("15.10lf\n", x);
【讨论】: