python 数字的四舍五入的问题

Posted WangC.W

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 数字的四舍五入的问题相关的知识,希望对你有一定的参考价值。

由于 python3 包括python2.7 以后的round策略使用的是decimal.ROUND_HALF_EVEN 
即Round to nearest with ties going to nearest even integer. 也就是只有在整数部分是奇数的时候, 小数部分才逢5进1; 偶数时逢5舍去。 这有利于更好地保证数据的精确性, 并在实验数据处理中广为使用。

>>> round(2.55, 1) # 2是偶数,逢5舍去
2.5
>>> format(2.55, .1f)
2.5

>>> round(1.55, 1) # 1是奇数,逢5进1
1.6
>>> format(1.55, .1f)
1.6

 

但如果一定要decimal.ROUND_05UP 即Round away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise round towards zero. 也就是逢5必进1需要设置floatdecimal.Decimal, 然后修改decimal的上下文

import decimal
from decimal import Decimal
context=decimal.getcontext() # 获取decimal现在的上下文
context.rounding = decimal.ROUND_05UP

round(Decimal(2.55), 1) # 2.6
format(Decimal(2.55), .1f) #‘2.6‘

 

ps, 这显然是round策略问题, 不要扯浮点数在机器中的存储方式, 且不说在python里float, int 都是同decimal.Decimal一样是对象, 就算是数字, 难道设计round的人就这么无知以至于能拿浮点数直接当整数一样比较?!

以上是关于python 数字的四舍五入的问题的主要内容,如果未能解决你的问题,请参考以下文章

四舍五入的python代码

js实现的数字四舍五入效果代码实例

如何将(四舍五入)浮点数数组更改为字符串数组python

为啥我的代码的最后一行没有打印?另外,我将数字四舍五入到小数点后两位的最简单方法是啥? [复制]

我想在python中得到四舍五入的整数?

Java 对任意数字进行四舍五入