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