10

例如,我想在 c 中打印一个小数点后 2 位的值,而不是四舍五入。

喜欢:

a = 91.827345;
printf("%.2f", a);

将打印91.83,但我只想输出91.82。怎么做?

4

2 回答 2

3

我建议更短更快的方法:

printf("%.2f", ((signed long)(fVal * 100) * 0.01f));

这样你就不会溢出int,加上乘以100不应该影响有效数/尾数本身,因为唯一真正改变的是指数。

于 2013-10-24T14:37:34.897 回答
1

唯一简单的方法是使用snprintf打印到足够长的缓冲区来保存整个精确值,然后将其截断为字符串。就像是:

char buf[2*(DBL_MANT_DIG + DBL_MAX_EXP)];
snprintf(buf, sizeof buf, "%.*f", (int)sizeof buf, x);
char *p = strchr(buf, '.'); // beware locale-specific radix char, though!
p[2+1] = 0;
puts(buf);
于 2013-10-24T14:27:59.260 回答