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

我试图以6点精度打印数字684.545007因为684.54之后数字被截断(不是舍入)

我用的时候

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

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

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

您正在寻找的是截断 。 这应该工作(至少对于不是非常大的数字):

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

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

在C ++ 11或C99中,您可以使用专用函数trunc (从头文件 。这将避免限制为适合整数类型的值。

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

这是我的方法。 它似乎很难看,但在大多数情况下确实有效,例如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); 
 printf("%.2f\n", var - 0.005);