我在将一些特殊的浮点数四舍五入为整数时遇到了一些麻烦。我需要将浮点数舍入为整数(当且仅当)前三个浮点值为零或 9。
例如,如果数字是 4.0001,我需要将其四舍五入为 4。如果数字是 4.9998,我需要将其四舍五入为 5。除此之外,值应按原样显示。
换句话说,只有满足上述两个规则时,我才需要打印一个整数,否则我应该打印浮点数,
如何在 C++ 中实现这一点。
问候
我在将一些特殊的浮点数四舍五入为整数时遇到了一些麻烦。我需要将浮点数舍入为整数(当且仅当)前三个浮点值为零或 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
应该四舍五入,则x
和之间的最大差值round(x)
为 0.0001。
当然,您应该知道二进制浮点不能精确地表示 0.0001,因此这始终是一个近似值。