- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Django 应用程序中使用 Decimal 对象,发现了这个奇怪的错误:
ipdb> decimal.Decimal(10) % 1
Decimal('0')
ipdb> decimal.Decimal(100) % 1
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
ipdb> decimal.Decimal(150) % 1
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
ipdb> decimal.Decimal(79) % 1
Decimal('0')
ipdb> decimal.Decimal(100.1) % 2
Decimal('0.10')
ipdb> decimal.Decimal(1000) % 2
*** decimal.InvalidOperation: [<class 'decimal.DivisionImpossible'>]
更神秘的是,在数字变得非常大之前,这不会发生在 ipython 中:
In [23]: decimal.Decimal(10**27) % 1
Out[23]: Decimal('0')
In [24]: decimal.Decimal(10**28) % 1
---------------------------------------------------------------------------
InvalidOperation Traceback (most recent call last)
<ipython-input-24-6ceaef82d283> in <module>()
----> 1 decimal.Decimal(10**28) % 1
InvalidOperation: [<class 'decimal.DivisionImpossible'>]
请注意,错误不仅限于 ipdb:我发现这个是因为 Decimal(380) % 1 破坏了我的 django 应用程序。
documentation描述这个错误说:
Division impossible
This occurs and signals invalid-operation if the integer result of a divide-integer or remainder operation had too many digits (would be longer than precision). The result is [0,qNaN].
有什么想法吗?
最佳答案
我想我明白了。
查看 source code ,我发现了这个:
# catch most cases of large or small quotient
expdiff = self.adjusted() - other.adjusted()
if expdiff >= context.prec + 1:
# expdiff >= prec+1 => abs(self/other) > 10**prec
return context._raise_error(DivisionImpossible)
if expdiff <= -2:
# expdiff <= -2 => abs(self/other) < 0.1
ans = self._rescale(ideal_exponent, context.rounding)
return ans._fix(context)
在我的 django 应用程序中,对 prec 进行了调整:
decimal.getcontext().prec = 2
这对我来说还是有点不对,因为:
In [39]: decimal.getcontext().prec + 1
Out[39]: 3
In [40]: decimal.Decimal(100).adjusted() - decimal.Decimal(0).adjusted()
Out[40]: 2
所以看起来 100 仍然在它检查的范围内(即 2 < 3
),但我非常有信心这就是问题的根源。如果有人能为我阐明为什么图书馆这样做,我很乐意更好地理解它。
关于python - decimal.Decimal(n) % 1 返回 InvalidOperation, DivisionImpossible for all n >= 100,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924369/
我正在尝试读取财务数据并将其存储。我从中获取财务数据的地方以惊人的精度存储数据,但我只对小数点后的 5 位数字感兴趣。因此,我决定在我创建的 Decimal 上使用 t = .quantize(cde
为什么要转换为 2 位小数的数字? x = 369.69 y=decimal.Decimal(x) Decimal('369.6899999999999977262632455676794052124
使用Python 3.5.2 >>> from decimal import Decimal >>> Decimal('12') % Decimal('0.01') Decimal('0.00') >
Application.Run(form); 实际上我试图从我的项目中调用它。我得到了这个异常(exception)。如何解决?我已经在我的项目中调用了另一个 Application.Run(frmB
我在运行这样的程序时总是会遇到这个错误: from decimal import * getcontext().prec =30 b=("2/3") Decimal(b) 错误: Traceback
我在我的项目中做了以下信号: @receiver(pre_save, sender=group1) @disable_for_loaddata def total_closing_group1(sen
我正在测试我的代码,我认为这段代码是正确的: while True: try: p = Decimal(raw_input(...)) if ...condit
查看 Decimal 我尝试将 pi 转换为各种精度。我可以使用下面的前两个选项调用 pi.quantize() 但它会引发 InvalidOperation 与第三个选项。 pi 的精度远不及...
在处理数据库 decimal 数据类型时,我遇到了 Pandas read_sql_query() 函数的问题。在使用 varchar 或 integer 类型时,我对下面相同的代码没有任何问题。 版
我在尝试运行 sinatra 应用程序时遇到错误。我试着用谷歌搜索它,但什么也没有出现。如果你们可以就如何修复它或我做错了什么提供任何建议,那将是很大的帮助。 部分代码出错 def logTow
我正在使用的系列: import pandas as pd from decimal import Decimal, BasicContext df = pd.Series([14978.22, 16
我打算将交付成本添加到项目总价中,但它不起作用。两个字段都是Decimal但它抛出这个错误 InvalidOperation at /orders/ [] .这是交货价格模型 回溯 File "/
我正在尝试使用 phantomjs 执行生成 PDF 文件的命令. 如果我使用命令提示符执行以下命令,一切正常。 C:\phantomjs-2.1.1\bin\phantomjs.exe C:\pha
我正在使用 Flask 和 pymongo 开发一个项目,我有一个用户集合和一个电影集合,其中实例如下: user = {"Email":"[email protected]" , "Comment
嗨当用户选择菜单项时,我从我的主窗体打开这样的窗体。 private void commToolStripMenuItem_Click(object sender, EventArgs e)
我正在测试 Web 核心 API,但收到 500 内部服务器错误。 我的 Controller 上的方法是; [Route("api/property")] public class Property
我正在尝试将背景 AudioPlayer 添加到 Windows Phone 8 应用程序。 我已经创建了主项目和背景音频代理。我在主项目中添加了对后台音频播放器的引用,并将以下内容添加到应用程序 l
我正在尝试将背景 AudioPlayer 添加到 Windows Phone 8 应用程序。 我已经创建了主项目和背景音频代理。我在主项目中添加了对后台音频播放器的引用,并将以下内容添加到应用程序 l
我在 Django 应用程序中使用 Decimal 对象,发现了这个奇怪的错误: ipdb> decimal.Decimal(10) % 1 Decimal('0') ipdb> decima
我有一个 MVC4 Web 应用程序项目,作为更大解决方案的一部分。我也有一个测试项目。我正在处理一堆不会被返工的代码,所以我不能总是做出我想做的更改。 MVC4 Web 应用程序具有“普通” Con
我是一名优秀的程序员,十分优秀!