如何在小数点后截断浮点数(不取整)

How to truncate a floating point number after a certain number of decimal places (no rounding)?

本文关键字:浮点数 小数点      更新时间:2023-10-16

我正试图打印精度为2点的数字684.545007,因为该数字在684.54之后会被截断(不取整)

当我使用时

var = 684.545007;
printf("%.2fn",var);

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

有人知道我该怎么纠正吗?

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

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

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

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

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 ("%gn", var_trunc);
printf("%.2fn", var - 0.005);