相关疑难解决方法(0)

将浮点数限制为两个小数点

我希望a四舍五入到13.95.

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
Run Code Online (Sandbox Code Playgroud)

round功能不像我预期的那样工作.

python floating-point precision rounding

1527
推荐指数
28
解决办法
287万
查看次数

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万
查看次数

舍入浮动与表示错误到最接近和正确的结果

我有一种情况,当Python中的经典表示错误开始成为一个问题:我需要它们用于Numpy中的Matrix操作,并且还不支持十进制类型.

你们都知道,如果我这样做,111.85 * 111.85我会得到,12510.422499999999但如果round(12510.422499999999, 4)我能得到正确的结果,那当然12510.4225.

但实际问题是:

  • 这轮会是一个好主意和一个好习惯吗?
  • 这适用于所有情况吗?有时小数位置,其中..999小数可能更多
  • 最后,如何获得适当的小数位数以用于所有可能值的回合?

python numpy bit-representation python-3.x

7
推荐指数
2
解决办法
301
查看次数

如何在Python 3.x中从0舍入?

在Python 2 舍入完成远离0,所以,例如,round(0.5)1.0.
但是,在Python 3.x中,舍入是针对偶数选择进行的,因此round(0.5) 也是如此0.
我可以在Python 3.x中使用什么函数来获取旧行为?

python python-2.7 python-3.x

7
推荐指数
3
解决办法
1075
查看次数

Python中的舍入/舍入标准

我正在将一个MATLAB代码移植到Python 3.5.1中,我发现了一个浮点数舍入问题.

在MATLAB中,以下数字向上舍入到第6个小数位:

fprintf(1,'%f', -67.6640625);
-67.664063
Run Code Online (Sandbox Code Playgroud)

在Python,而另一方面,下面的数字将被四舍五入至第6位小数:

print('%f' % -67.6640625)
-67.664062
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果该号码是"-67.6000625",则取整起来,即使在Python:

print('%f' % -67.6000625)
-67.600063
Run Code Online (Sandbox Code Playgroud)

......为什么会这样?在Python中舍入/增加的标准是什么?(我相信这与处理十六进制值有关.)

更重要的是,我该如何防止这种差异?我应该创建一个python代码,它可以重现与MATLAB生成的完全相同的输出.

python matlab rounding

5
推荐指数
1
解决办法
384
查看次数

浮点数和小数。小数计算

我是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
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

ccc= aa*b 
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误

我需要一种方法来对所有 Decimal('') 数字执行数学运算或使浮点数字更准确(没有额外的十进制数字(0.0016 而不是 0.0015999996))

python variables vba declaration decimal

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