Python - 按四分之一间隔舍入

Posted

技术标签:

【中文标题】Python - 按四分之一间隔舍入【英文标题】:Python - Rounding by quarter-intervals 【发布时间】:2011-12-28 10:54:31 【问题描述】:

我遇到了以下问题:

给定各种数字,例如:

10.38

11.12

5.24

9.76

是否存在一个已经“内置”的函数来将它们四舍五入到最接近的 0.25 步长,例如:

10.38 --> 10.50

11.12 --> 11.00

5.24 --> 5.25

9.76 --> 9-75 ?

或者我可以继续编写一个执行所需任务的函数吗?

提前感谢和

致以最诚挚的问候

【问题讨论】:

【参考方案1】:

paxdiablo的解决方案可以稍微改进一下。

def roundPartial (value, resolution):
return round (value /float(resolution)) * resolution

所以函数现在是:“数据类型敏感”。

【讨论】:

【参考方案2】:

这是一种通用解决方案,允许四舍五入到任意分辨率。对于您的具体情况,您只需要提供0.25 作为分辨率,但其他值也可以,如测试用例所示。

def roundPartial (value, resolution):
    return round (value / resolution) * resolution

print "Rounding to quarters"
print roundPartial (10.38, 0.25)
print roundPartial (11.12, 0.25)
print roundPartial (5.24, 0.25)
print roundPartial (9.76, 0.25)

print "Rounding to tenths"
print roundPartial (9.74, 0.1)
print roundPartial (9.75, 0.1)
print roundPartial (9.76, 0.1)

print "Rounding to hundreds"
print roundPartial (987654321, 100)

这个输出:

Rounding to quarters
10.5
11.0
5.25
9.75
Rounding to tenths
9.7
9.8
9.8
Rounding to hundreds
987654300.0

【讨论】:

一个漂亮的通用解决方案。如何将所有给定的解决方案标记为“已接受的答案”? @Daniyal:你不能。如果答案不能按优点排序,我通常的行为是将它(连同赞成票)给代表最低的人,并赞成其他人。在这种情况下,不幸的是,那不是我 :-)【参考方案3】:
>>> def my_round(x):
...  return round(x*4)/4
... 
>>> 
>>> assert my_round(10.38) == 10.50
>>> assert my_round(11.12) == 11.00
>>> assert my_round(5.24) == 5.25
>>> assert my_round(9.76) == 9.75
>>> 

【讨论】:

head--->desk 确实微不足道 - 我将在凌晨 5 点停止编码 -.- 谢谢 pulegium 和 6502【参考方案4】:

没有内置函数,但是这样的函数写起来很简单

def roundQuarter(x):
    return round(x * 4) / 4.0

【讨论】:

以上是关于Python - 按四分之一间隔舍入的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中舍入到给定的数字

有没有办法将时间戳向上或向下舍入到最接近的 30 分钟间隔?

将每隔 30 分钟收集的数据舍入为设置的 30 分钟间隔

按四分割(格式化)二进制字符串

如何使用 C# 舍入到最接近的千分之一

T-SQL 舍入与 C# 舍入