相关疑难解决方法(0)

Python 3.x舍入行为

我刚刚重新阅读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
Run Code Online (Sandbox Code Playgroud)

正如我所料.但是,现在在v3.2.3下:

In [32]: round(2.5)
Out[32]: 2

In [33]: round(3.5)
Out[33]: 4
Run Code Online (Sandbox Code Playgroud)

这似乎是违反直觉的,与我对四舍五入的理解相反(并且必然会绊倒人).英语不是我的母语,但在我读到这篇文章之前,我以为我知道舍入的含义是什么: - /我确信在引入v3的时候一定有一些关于这个的讨论,但是我无法找到一个很好的理由我的搜索.

  1. 有没有人能够深入了解为什么会改变这种情况?
  2. 有没有其他主流编程语言(例如,C,C++,Java,Perl, ..)这样做(对我不一致)舍入?

我在这里错过了什么?

更新:@ Li-aungYip的评论"银行家的舍入"给了我正确的搜索词/搜索关键字,我发现了这个问题:为什么.NET使用银行家的舍入作为默认值?所以我会仔细阅读.

python rounding python-3.x

157
推荐指数
5
解决办法
5万
查看次数

为什么Ruby的Float#round行为与Python不同?

" Python中"round"函数的行为 "观察到Python循环浮动如下:

>>> round(0.45, 1)
0.5
>>> round(1.45, 1)
1.4
>>> round(2.45, 1)
2.5
>>> round(3.45, 1)
3.5
>>> round(4.45, 1)
4.5
>>> round(5.45, 1)
5.5
>>> round(6.45, 1)
6.5
>>> round(7.45, 1)
7.5
>>> round(8.45, 1)
8.4
>>> round(9.45, 1)
9.4
Run Code Online (Sandbox Code Playgroud)

接受的答案证实这是由于浮点数的二进制表示不准确引起的,这都是合乎逻辑的.

假设Ruby浮点数和Python一样不准确,那么Ruby如何像人类一样漂浮?Ruby欺骗了吗?

1.9.3p194 :009 > 0.upto(9) do |n|
1.9.3p194 :010 >     puts (n+0.45).round(1)
1.9.3p194 :011?>   end
0.5
1.5
2.5
3.5
4.5
5.5
6.5
7.5
8.5
9.5
Run Code Online (Sandbox Code Playgroud)

ruby python rounding floating-accuracy

13
推荐指数
2
解决办法
865
查看次数

Python中的舍入错误与非奇数?

我是Python的初学者,我有一个问题.
为什么舍入一个数字,如5.5,7.5,(任何).5与奇数整数部分应用round(num)正常工作(规则5/4),但舍入数字像(任何).5与非奇数整数部分由同一函数返回整数部分?(但是如果我们在这个十进制数字上添加一个像0.000000001这样的小数字就能正常工作)

我的意思是下一个:

round(9.5)
Run Code Online (Sandbox Code Playgroud)

返回10,这是正确的.但

round(8.5)
Run Code Online (Sandbox Code Playgroud)

返回8,这是不正确的.和

round(8.5 + 0.0000000000001)
Run Code Online (Sandbox Code Playgroud)

返回9.

为什么它不正确?
我在Windows上使用Python 3.2.2.

python rounding python-3.x

9
推荐指数
1
解决办法
2703
查看次数

标签 统计

python ×3

rounding ×3

python-3.x ×2

floating-accuracy ×1

ruby ×1