C++ 将特殊浮点值舍入为整数

c++ rounding special float values to integers

本文关键字:舍入 整数 C++      更新时间:2023-10-16

我在将一些特殊的浮点数四舍五入为整数时遇到了一些问题。我需要将浮点数四舍五入为整数(当且仅当)前三个浮点值为零或 9。

例如,如果数字是 4.0001,我需要将其四舍五入为 4。 如果数字是 4.9998,我需要将其四舍五入为 5。除此之外,这些值应按原样显示。

换句话说,只有在满足上述两个规则的情况下,我才需要打印一个整数,否则我应该打印浮点数,

如何在C++实现这一目标。

问候

如果您对小数部分感兴趣,modf是您的朋友。 说像这样:

double
conditionallyRound( double original )
{
    double dummy;
    double frac = modf( fabs( original ), &dummy );
    return frac < 0.001 || frac > 0.999
        ? round( original )
        : original;
}

如果x应该四舍五入,那么xround(x)之间的最大差值将为0.0001。

当然,您应该知道二进制浮点不能完全表示 0.0001,因此这始终是一个近似值。