例如,我想在c中打印一个最多2个小数位的值,而不会将其四舍五入。
像:
a = 91.827345;
printf("%.2f", a);
将打印91.83
,但我希望输出仅为91.82
。怎么做?
答案 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);