- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试读取财务数据并将其存储。我从中获取财务数据的地方以惊人的精度存储数据,但我只对小数点后的 5 位数字感兴趣。因此,我决定在我创建的 Decimal 上使用 t = .quantize(cdecimal.Decimal('.00001'), rounding=cdecimal.ROUND_UP),但我一直收到 InvalidOperation 异常。这是为什么?
>>> import cdecimal
>>> c = cdecimal.getcontext()
>>> c.prec = 5
>>> s = '45.2091000080109'
>>> # s = '0.257585003972054' works!
>>> t = cdecimal.Decimal(s).quantize(cdecimal.Decimal('.00001'), rounding=cdecimal.ROUND_UP)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
cdecimal.InvalidOperation: [<class 'cdecimal.InvalidOperation'>]
这里为什么会出现无效操作?如果我将精度更改为 7(或更高),它就会起作用。如果我将 s 设置为 '0.257585003972054' 而不是原始值,那也可以!这是怎么回事?
谢谢!
最佳答案
十进制版本可以更好地描述错误:
Python 2.7.2+ (default, Feb 16 2012, 18:47:58)
>>> import decimal
>>> s = '45.2091000080109'
>>> decimal.getcontext().prec = 5
>>> decimal.Decimal(s).quantize(decimal.Decimal('.00001'), rounding=decimal.ROUND_UP)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/decimal.py", line 2464, in quantize
'quantize result has too many digits for current context')
File "/usr/lib/python2.7/decimal.py", line 3866, in _raise_error
raise error(explanation)
decimal.InvalidOperation: quantize result has too many digits for current context
>>>
Docs :
Unlike other operations, if the length of the coefficient after thequantize operation would be greater than precision, then anInvalidOperation is signaled. This guarantees that, unless there is anerror condition, the quantized exponent is always equal to that of theright-hand operand.
但我必须承认我不知道这意味着什么。
关于Python cdecimal InvalidOperation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9648650/
我正在尝试读取财务数据并将其存储。我从中获取财务数据的地方以惊人的精度存储数据,但我只对小数点后的 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
我是一名优秀的程序员,十分优秀!