如何在一定数量的小数位(没有舍入)后截断浮点数?

时间:2012-10-05 02:59:37

标签: c++ c printf

我正在尝试以{2}精度打印数字684.545007,因为684.54之后数字会被截断(不是舍入)

当我使用

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

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

有谁知道我怎么能纠正这个?

3 个答案:

答案 0 :(得分:24)

您要找的是截断。这应该有效(至少对于不是非常大的数字):

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

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

在C ++ 11或C99中,您可以使用专用函数trunc(从标题<cmath><math.h>开始。这将避免限制适合的值成为一个整体类型。

std::trunc(100 * var) / 100     // no need for casts

答案 1 :(得分:2)

这是我的方法。看起来很丑,但在大多数情况下确实有效,例如var可以大于int,可以是零或奇异的&#39; -0&#39;。但它不处理无穷大和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);

答案 2 :(得分:1)

printf("%.2f\n", var - 0.005);