0

いくつかの特殊な浮動小数点数を整数に丸めるのに問題があります。最初の3つの浮動小数点値がゼロまたは9である場合に限り、浮動小数点数を整数に丸める必要があります。

たとえば、数値が4.001の場合、これを4に丸める必要があり、数値が4.9998の場合、5に丸める必要があります。それ以外の場合、値はそのまま表示されます。

つまり、上記の2つのルールが満たされた場合にのみ整数を出力する必要があります。そうでない場合は、浮動小数点数を出力する必要があります。

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、 と の最大差は0.0001 になりますxround(x)

もちろん、2 進浮動小数点は 0.0001 を正確に表すことができないことに注意する必要があるため、これは常に概算になります。

于 2012-04-23T08:15:27.343 に答える