提问人:sung 提问时间:11/13/2019 更新时间:11/13/2019 访问量:112
在 Python 中向上舍入浮动的千分之一位 5s [重复]
Round up floating thousandth place 5s up in Python [duplicate]
问:
我正在使用这个函数在 Python 中四舍五入浮动 5s:
def round_half_up_xx(n, decimals=2):
multiplier = 10 ** decimals
return math.floor(n*multiplier + 0.5) / multiplier
我得到奇怪的结果:
- round_half_up_xx(81.225) => 81.22
- round_half_up_xx(81.235) => 81.24
如何修改代码以使 round_half_up_xx(81.225) 产生 81.23?
答:
2赞
ShadowRanger
11/13/2019
#1
你不能,因为 IEEE 754 二进制浮点数中不是实际值。它是 的简写,因为它不以千分之一结尾,因此四舍五入而不涉及特殊的四舍五入规则。81.225
81.2249999999999943...
5
81.22
如果你想要这种真正的精度,你需要使用decimal
模块,用s或初始化值(如果你用,它将尽可能地准确地反映的精度,所以它也不会)。凭借十进制精度,它可以使用您喜欢的任何舍入策略进行十进制舍入,而无需像您在此处所做的那样从头开始重新实现它。decimal.Decimal
int
str
float
float
81.225
评论
Decimal
模块。它已经按照您想要的方式实现了舍入函数。从那里“四舍五入选项包括ROUND_CEILING、ROUND_DOWN、ROUND_FLOOR、ROUND_HALF_DOWN、ROUND_HALF_EVEN、ROUND_HALF_UP、ROUND_UP和ROUND_05UP。math.ceil(n*100)/100
81.220000000001
81.23
81.225
81.23
81.225
81.22