python 3.X整数的四舍五入问题以及解决办法

问题:

python正常的除法运算:

3/2=1.5

python的取整运算:舍弃小数点,取整数部分。

3//2=1
4//3=1

上述方法无法解决四舍五入的整数问题。


常用的解决方法:

  • round(number, ndigits=None)
    • The return value is an integer if ndigits is omitted(省略) or None.
    • 否则,就保留指定小数位。

 

一般情况下,能够解决大多数问题;但是,round对于0.5这个精度处理的方式有些特殊:

round(3.5)=4
round(4.5)=4
round(4.55,1)=4.5
round(4.45,1)=4.5
round(3.45,1)=3.5
round(3.55,1)=3.5

 

在python中,四舍五入有几种模式:一般采用的是decimal.ROUND_HALF_EVEN;(向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。)

Rounding modes

decimal.ROUND_CEILING

Round towards Infinity.

decimal.ROUND_DOWN

Round towards zero.

decimal.ROUND_FLOOR

Round towards -Infinity.

decimal.ROUND_HALF_DOWN

Round to nearest with ties going towards zero.

decimal.ROUND_HALF_EVEN

Round to nearest with ties going to nearest even integer.

decimal.ROUND_HALF_UP

Round to nearest with ties going away from zero.

decimal.ROUND_UP

Round away from zero.

decimal.ROUND_05UP

Round away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise round towards zero.

用round实现四舍五入,可以通过round(x+0.5)这样的方式来实现对x取整的四舍五入

round(3.5+0.5)=4
round(4.5+0.5)=5

如果想要实现对x的某位进行四舍五入,可以先乘以10/100/1000,再除以相同的数:

round(3.725*100+0.5)/100=3.73       #实现对3.725的0.01的四舍五入
round(3.8855*1000+0.5)/1000=3.886   #实现对3.8855的0.001的四舍五入

强大的解决方法:通过decimal模块进行解决

参考1

参考2

你可能感兴趣的:(Python)