Python - 品脱 - 我可以将默认类型设置为Decimal吗?

时间:2017-07-10 12:05:41

标签: python decimal pint

我在项目中使用pint模块。我的项目中的对象将数值数据处理为Decimals。当我将简单的pint单位设置为Decimal时,它可以工作:

>>> import pint
>>> from decimal import Decimal as D
>>> ureg = pint.UnitRegistry()
>>> D(10) * ureg.kN
<Quantity(10, 'kilonewton')>

但是,如果我尝试添加第二个单元,它会中断。在这个例子中建立kiloNewton *米:

>>> D(10) * ureg.kN * ureg.m
TypeError: unsupported operand type(s) for *: 'decimal.Decimal' and 'float'

我正在使用这个黑客:

>>> a = D(1) * ureg.kN
>>> b = D(1) * ureg.m
>>> unit_kNm = a * b
>>> D(10) * unit_kNm
<Quantity(10, 'kilonewton * meter')>

我明白为什么会这样。我正在寻找一种解决方案来设置我想要的品脱。

2 个答案:

答案 0 :(得分:2)

这有效:

>>> D(10) * (ureg.kN * ureg.m)
<Quantity(10, 'kilonewton * meter')>

这也是:

>>> Q = ureg.Quantity
>>> Q(D(10), "kN*m")
<Quantity(10, 'kilonewton * meter')>

答案 1 :(得分:1)

将其转换为decimal

import decimal
D(10) * ureg.kN * decimal.Decimal(ureg.m)