Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获取小数点的值。不精确异常?_Python_Exception_Decimal - Fatal编程技术网

Python 如何获取小数点的值。不精确异常?

Python 如何获取小数点的值。不精确异常?,python,exception,decimal,Python,Exception,Decimal,在模块文档中,我阅读了: 类小数。不精确 表示发生舍入,结果不准确。[……]四舍五入 返回结果。[……] 如何得到四舍五入的结果?下面是一个例子: >>> from decimal import Decimal, Context, Inexact >>> (Decimal("1.23")/2).quantize(Decimal("0.1"), context=Context(traps=[Inexact])) Traceback (most recent ca

在模块文档中,我阅读了:

类小数。不精确

表示发生舍入,结果不准确。[……]四舍五入 返回结果。[……]

如何得到四舍五入的结果?下面是一个例子:

>>> from decimal import Decimal, Context, Inexact
>>> (Decimal("1.23")/2).quantize(Decimal("0.1"), context=Context(traps=[Inexact]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/decimal.py", line 2590, in quantize
    context._raise_error(Inexact)
  File "/usr/lib/python3.4/decimal.py", line 4043, in _raise_error
    raise error(explanation)
decimal.Inexact: None
>>从十进制输入十进制、上下文、不精确
>>>(十进制(“1.23”)/2)。量化(十进制(“0.1”),上下文=上下文(陷阱=[不精确])
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.4/decimal.py”,第2590行,量化
上下文。\u引发\u错误(不精确)
文件“/usr/lib/python3.4/decimal.py”,第4043行,出现错误
提出错误(解释)
十进制。不精确:无

您误解了文档;该操作仅在您不陷阱时返回舍入结果,而在上下文上设置
不精确
标志

但是,当您捕获异常时,会引发异常,并且不会返回取整结果

从:

上下文还具有用于监视计算过程中遇到的异常情况的信号标志。在显式清除之前,这些标志将保持设置状态,因此最好使用
clear\u flags()
方法在每组受监控的计算之前清除这些标志

>从十进制导入本地上下文
>>>使用localcontext()作为ctx:
...     (十进制(“1.23”)/2)。量化(十进制(“0.1”))
...     打印(ctx.flags)
... 
十进制('0.6')
{: 0, : 0, : 0, : 1, : 1, : 0, : 0, : 0}
这里设置了
decimal.increact
decimal.Rounded
标志,告诉您
decimal('0.6')
返回值不精确

仅当特定信号应为错误时才使用补漏白;e、 当四舍五入对你的申请是个问题时

>>> from decimal import localcontext
>>> with localcontext() as ctx:
...     (Decimal("1.23")/2).quantize(Decimal("0.1"))
...     print(ctx.flags)
... 
Decimal('0.6')
{<class 'decimal.Subnormal'>: 0, <class 'decimal.Underflow'>: 0, <class 'decimal.DivisionByZero'>: 0, <class 'decimal.Inexact'>: 1, <class 'decimal.Rounded'>: 1, <class 'decimal.InvalidOperation'>: 0, <class 'decimal.Overflow'>: 0, <class 'decimal.Clamped'>: 0}