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

vhb*_*uza 11 c c++ printf

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

我用的时候

var = 684.545007;
printf("%.2f\n",var);
Run Code Online (Sandbox Code Playgroud)

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

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

Ker*_* SB 24

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

printf(".2f", ((int)(100 * var)) / 100.0);
Run Code Online (Sandbox Code Playgroud)

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

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

std::trunc(100 * var) / 100     // no need for casts
Run Code Online (Sandbox Code Playgroud)