例如,我想在 c 中打印一个小数点后 2 位的值,而不是四舍五入。
喜欢:
a = 91.827345;
printf("%.2f", a);
将打印91.83
,但我只想输出91.82
。怎么做?
例如,我想在 c 中打印一个小数点后 2 位的值,而不是四舍五入。
喜欢:
a = 91.827345;
printf("%.2f", a);
将打印91.83
,但我只想输出91.82
。怎么做?
我建议更短更快的方法:
printf("%.2f", ((signed long)(fVal * 100) * 0.01f));
这样你就不会溢出int,加上乘以100不应该影响有效数/尾数本身,因为唯一真正改变的是指数。
唯一简单的方法是使用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);