12

我正在尝试以684.5450072 点精度打印数字,因为数字684.54.

当我使用

var = 684.545007;
printf("%.2f\n",var);

它输出684.55,但我想得到的是684.54

有谁知道我该如何纠正这个?

4

3 回答 3

25

您正在寻找的是truncation。这应该有效(至少对于不是很大的数字):

printf(".2f", ((int)(100 * var)) / 100.0);

转换为整数会截断小数部分。

trunc在 C++11 或 C99 中,您可以为此目的使用专用函数(来自标头<cmath><math.h>. 这将避免对适合整数类型的值的限制。

std::trunc(100 * var) / 100     // no need for casts
于 2012-10-05T03:05:31.300 回答
2

这是我的方法。它看起来很难看,但在大多数情况下确实有效,例如 var 可以大于 int,可以为零或奇怪的“-0”。但它不处理无穷大和 NaN。

double var = 684.545007; // or whatever
double var_trunc = var>=0. ? floor(var*100.)/100. : ceil(var*100.)/100.;
printf ("%g\n", var_trunc);
于 2014-08-05T12:54:32.817 回答
1
printf("%.2f\n", var - 0.005);
于 2012-10-05T03:22:47.900 回答