如何将浮点值打印到小数点后2位而不会四舍五入

时间:2013-10-24 14:18:31

标签: c

例如,我想在c中打印一个最多2个小数位的值,而不会将其四舍五入。

像:

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

将打印91.83,但我希望输出仅为91.82。怎么做?

2 个答案:

答案 0 :(得分:2)

我建议采用更短更快的方法:

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

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

答案 1 :(得分: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);