- 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
我有: import cdecimal sys.modules["decimal"] = cdecimal 就在我创建应用程序实例之前以及使用manage.py 运行任务之前,但我如何确定它实际上正在
所以我尝试使用 cdecimal 在我的数据库中存储货币值。 SQLAlchemy Doc import sys import cdecimal sys.modules["decimal"] = cd
在处理数据库 decimal 数据类型时,我遇到了 Pandas read_sql_query() 函数的问题。在使用 varchar 或 integer 类型时,我对下面相同的代码没有任何问题。 版
我正在构建一个使用 SQLAlchemy 而不是 MySQL 的 Django 应用程序。我使用的是 cdecimal 而不是内置的 Decimal。在我的一个表中,我有一个数值列 (value =
我的 django + SQLAlchemy 应用程序使用 cdecimal 而不是默认的 decimal 模块。我按照 SQLAlchemy 网站上的说明进行操作: import sys impor
我是一名优秀的程序员,十分优秀!