Python舍入混乱
该代码将1.5(值=15)四舍五入为2,但也将144.5(值=1445)四舍五入为144。我不明白为什么Python舍入混乱,python,rounding,Python,Rounding,该代码将1.5(值=15)四舍五入为2,但也将144.5(值=1445)四舍五入为144。我不明白为什么 def rounders(value): count = 0 while value >= 10: value = round(value / 10, 0) count += 1 return value * (10 ** count) 这是我试图解决“圆人”挑战的尝试。下面是对正在尝试的内容的解释 范例 对于值=15,输出应为
def rounders(value):
count = 0
while value >= 10:
value = round(value / 10, 0)
count += 1
return value * (10 ** count)
这是我试图解决“圆人”挑战的尝试。下面是对正在尝试的内容的解释
范例
对于值=15,输出应为
舍入值=20
对于value=1234,输出应为
舍入器(值)=1000
1234->1230->1200->1000
对于值=1445,输出应为
舍入者(值)=2000
1445->1450->1500->2000。这个问题与。那里写的关于
np.round
的内容直接适用于python 3的内置round
方法。请注意,python 2的行为是不同的(如上面的帖子所述。感谢ShadowRanger指出这一点。)
查看圆形
方法的步骤:
如果两个倍数相等接近,则向偶数方向取整
就是
round(2.5) == 2
round(3.5) == 4
您可以使用简单的if语句编写具有直观行为的舍入方法:
def myRound(x):
r = x % 1
if r < 0.5:
return x-r
else:
return x-r+1
def myRound(x):
r=x%1
如果r<0.5:
返回x-r
其他:
返回x-r+1
这是python 2还是python 3?旁注:这种舍入模式通常被称为“舍入-一半-偶数”模式,对于金融环境中的无偏舍入(您不希望您的银行总是舍入到对其有利的位置)和避免级联错误非常有用(在长时间的计算中,重复向同一方向四舍五入会放大误差;向偶数方向四舍五入会使误差趋于平衡)。如果您需要更多控制,可以使用decimal.decimal
值,这允许您调整上下文以选择与所需行为相匹配的值。还要注意,round
仅在Py3上使用round-half-偶数模式;(两半从0取整,因此-0.5
-1.0和0.5
-1.0),它总是返回float
(其中,当未提供第二个参数时,Py3返回int
)。