取整函数round、rint在C/C++、Java、C#中的区别

【C/C++】

round表示四舍五入(五向绝对值增大方向入),比如round(-1.5)=-2.0

rint、nearbyint在fesetround状态为默认的FE_TONEAREST时表示四舍六入五取偶,比如rint(1.5)=rint(2.5)=2.0

rint、nearbyint在fesetround状态为FE_DOWNWARD、FE_UPWARD、FE_TOWARDZERO时分别表示floor、ceil、trunc

rint和nearbyint的区别是nearbyint不引起FE_INEXACT浮点异常

【Java】

Math.round表示四舍五入(五向正无穷方向入),比如Math.round(-1.5)=-1.0

Math.rint表示四舍六入五取偶,比如Math.rint(1.5)=Math.rint(2.5)=2.0

【C#】

Math.Round默认表示四舍六入五取偶,比如Math.Round(1.5)=Math.Round(2.5)=2.0

添加MidpointRounding.AwayFromZero参数后,表示四舍五入(五向绝对值增大方向入),比如Math.Round(-1.5, MidpointRounding.AwayFromZero)=-2.0

【总结】

如果需要通过就近舍入避免截断为整数引起的计算结果抖动,五向何处入并不重要,可以选一个最常用的使用

如果需要处理科学数据,一般使用四舍六入五取偶

如果需要使用四舍五入,应该注意数据有没有负数,如果有负数的话,要注意五应该向哪个方向入

【在C/C++、C#中实现四舍、六入、五向正无穷方向入】

floor(x+0.5)、Math.Floor(x+0.5)

【在Java中实现四舍五入】

Math.copySign(Math.round(Math.abs(x)), x)

你可能感兴趣的:(其它)