2016-08-25 6 views
5

현재 단위 및 단위 변환을 처리하기 위해 Pint을 사용하고 있습니다. 이 비율을 대표하는, 예를파인트로 백분율을 정의하고 사용하는 방법

>>> import pint 
>>> ureg = pint.UnitRegistry() 
>>> Q = ureg.Quantity 
>>> a = Q(5, 'm/s') 
>>> a 
<Quantity(5, 'meter/second')> 
>>> a.to('ft/s') 
<Quantity(16.404199475065617, 'foot/second')> 

내가 define my own units에 노력을 위해, 이미 파인트에 정의 된 단위를 위해 잘 작동하는 것 같다. 단위 변환에 관한 한 백분율은 단순히 무 차원의 100 배이며, 이는 내가 정의한 것입니다.

>>> ureg.define('percent = dimensionless * 100 = pct') 
>>> a = Q(5, 'pct') 
>>> a 
<Quantity(5, 'percent')> 

그러나 나는 분획 ('dimensionless')와 'pct' 사이에 앞뒤로 변환 할 수없는 것.

>>> a.to('dimensionless') 
Traceback (most recent call last): 
    File "<pyshell#31>", line 1, in <module> 
    a.to('dimensionless') 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\quantity.py", line 263, in to 
    magnitude = self._convert_magnitude_not_inplace(other, *contexts, **ctx_kwargs) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\quantity.py", line 231, in _convert_magnitude_not_inplace 
    return self._REGISTRY.convert(self._magnitude, self._units, other) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\unit.py", line 1026, in convert 
    return self._convert(value, src, dst, inplace) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\unit.py", line 1042, in _convert 
    src_dim = self._get_dimensionality(src) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\unit.py", line 813, in _get_dimensionality 
    self._get_dimensionality_recurse(input_units, 1.0, accumulator) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\unit.py", line 837, in _get_dimensionality_recurse 
    self._get_dimensionality_recurse(reg.reference, exp2, accumulator) 
    File "C:\Python35\python-3.5.1.amd64\lib\site-packages\pint\unit.py", line 835, in _get_dimensionality_recurse 
    reg = self._units[self.get_name(key)] 
KeyError: '' 

내가 본질적으로하고 싶은 것은 예 : "0.73"과 "73 %". 어떻게 그러한 단위를 정의하고 사용할 수 있습니까?

답변

5

GitHub 발행 hgrecco/pint#185은 귀하가 설명한 경우를 다루는 것으로 보입니다. 은 Using

작업이 주위에 그 문제를 논의하는 것은 나를 Pint-0.7.2를 사용하여 작동 :

from pint.unit import ScaleConverter 
from pint.unit import UnitDefinition 
import pint 

ureg = pint.UnitRegistry() 
Q = ureg.Quantity 

ureg.define(UnitDefinition('percent', 'pct',(), ScaleConverter(1/100.0))) 
a = Q(5, 'pct') 

print a 
print a.to('dimensionless') 

가 출력 : 내가 pint.converters에서`사용

5 percent 
0.05 dimensionless 
+1

는 파인트 0.8으로 ScaleConverter' – nowox

+1

을 가져 그 'pint.unit.ScaleConverter'를 제거한 것으로 보이지만'pint.converters.ScaleConverter'은 여전히 ​​사용할 수 있으므로 나머지 솔루션은 여전히 ​​유효합니다. – CoryKramer