Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python舍入混乱_Python_Rounding - Fatal编程技术网

Python舍入混乱

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,输出应为

该代码将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,输出应为 舍入值=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
)。