0

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

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

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

如何在 C++ 中实现这一点。

问候

4

2 回答 2

4

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

double
conditionallyRound( double original )
{
    double dummy;
    double frac = modf( fabs( original ), &dummy );
    return frac < 0.001 || frac > 0.999
        ? round( original )
        : original;
}
于 2012-04-23T08:20:27.430 回答
2

如果x应该四舍五入,则x和之间的最大差值round(x)为 0.0001。

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

于 2012-04-23T08:15:27.343 回答