Python中的四舍五入
目录
在掘金看到一篇文章,讲 Python 中使用 round
函数进行浮点数四舍五入时不够精确的原因,总结一下。
不够精确的原因
对浮点数进行四舍五入不够精确的原因主要有两个:
- 在 Python 中浮点数本身不够精确;
round
函数默认采用的数值修约规则是“四舍六入五成双”,不是“四舍五入”;
四舍六入五成双与奇进偶舍
举个例子,对于小数 a.bcd
,保留两位小数。
四舍六入五成双
,四舍六入五成双的规则是:
- 如果
d
小于 5,舍去; - 如果
d
大于 5,进位; - 如果
d
等于 5,则遵循“奇进偶舍”;
奇进偶舍
如果 d
等于 5:
d
后面没有数字时,需要看 c
:
- 如果
c
是奇数,则进一位; - 如果
c
是偶数,则舍去。
d
后面还有数字,则无论 c
是奇数还是偶数,都进一位。
解决方案
- 针对浮点数表示不够精确的问题,使用 decimal 类型进行精确表示。
- 使用 decimal 类型的
quantize
进行运算,并指定数值修约类型为decimal.ROUND_HALF_UP
。
注:默认的数值修约方式为
decimal.ROUND_HALF_EVEN
,即四舍六入五成双。
|
|