我希望a四舍五入到13.95.
>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
该round功能不像我预期的那样工作.
我刚刚重新阅读Python 3.0中的新功能,它指出:
round()函数舍入策略和返回类型已更改.确切的中途情况现在四舍五入到最接近的偶数结果而不是零.(例如,round(2.5)现在返回2而不是3.)
和圆形文件:
对于支持round()的内置类型,值被舍入到10的最接近的倍数到幂减去n; 如果两个倍数相等,则向均匀选择进行舍入
所以,在v2.7.3下:
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
正如我所料.但是,现在在v3.2.3下:
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
这似乎是违反直觉的,与我对四舍五入的理解相反(并且必然会绊倒人).英语不是我的母语,但在我读到这篇文章之前,我以为我知道舍入的含义是什么: - /我确信在引入v3的时候一定有一些关于这个的讨论,但是我无法找到一个很好的理由我的搜索.
我在这里错过了什么?
更新:@ Li-aungYip的评论"银行家的舍入"给了我正确的搜索词/搜索关键字,我发现了这个问题:为什么.NET使用银行家的舍入作为默认值?所以我会仔细阅读.
我有一种情况,当Python中的经典表示错误开始成为一个问题:我需要它们用于Numpy中的Matrix操作,并且还不支持十进制类型.
你们都知道,如果我这样做,111.85 * 111.85我会得到,12510.422499999999但如果round(12510.422499999999, 4)我能得到正确的结果,那当然12510.4225.
但实际问题是:
我正在将一个MATLAB代码移植到Python 3.5.1中,我发现了一个浮点数舍入问题.
在MATLAB中,以下数字向上舍入到第6个小数位:
fprintf(1,'%f', -67.6640625);
-67.664063
在Python,而另一方面,下面的数字将被四舍五入掉至第6位小数:
print('%f' % -67.6640625)
-67.664062
有趣的是,如果该号码是"-67.6000625",则取整起来,即使在Python:
print('%f' % -67.6000625)
-67.600063
......为什么会这样?在Python中舍入/增加的标准是什么?(我相信这与处理十六进制值有关.)
更重要的是,我该如何防止这种差异?我应该创建一个python代码,它可以重现与MATLAB生成的完全相同的输出.
我是Python新手,我正在将程序从VBA Excel重写为Python。
我需要准确的计算,但无法找出合适的方法。
例子:
aa = 0.000016
bb = 0.000016
cc = aa*bb      # which gives 2.5599999999999996e-12
a = decimal.Decimal('0.0000016') 
b = decimal.Decimal('0.0000016')
c = a*b         # which gives 2.56E-12
但当我这样做时:
ccc= aa*b 
它给了我一个错误
我需要一种方法来对所有 Decimal('') 数字执行数学运算或使浮点数字更准确(没有额外的十进制数字(0.0016 而不是 0.0015999996))
python ×6
python-3.x ×3
rounding ×3
decimal ×1
declaration ×1
matlab ×1
numpy ×1
precision ×1
python-2.7 ×1
variables ×1
vba ×1