码迷,mamicode.com
首页 > 编程语言 > 详细

python 数字的四舍五入的问题

时间:2018-07-25 23:58:30      阅读:400      评论:0      收藏:0      [点我收藏+]

标签:奇数   tco   精确   浮点数   div   ima   etc   dig   python2.7   

由于 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 数字的四舍五入的问题

标签:奇数   tco   精确   浮点数   div   ima   etc   dig   python2.7   

原文地址:https://www.cnblogs.com/wangchaowei/p/9368888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!