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

时间:2012-04-23 08:12:51

标签: c++ visual-studio

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

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

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

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

问候

2 个答案:

答案 0 :(得分:4)

如果您对小数部分感兴趣,modf是您的朋友。说 类似的东西:

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

答案 1 :(得分:2)

如果x应该舍入,则xround(x)之间的最大差异将为0.0001。

当然,你应该知道二进制浮点数不能精确地表示0.0001,所以这总是一个近似值。