Pint

2016-08-25 11 views
5

'daki yüzde oranı nasıl tanımlanır ve kullanılır Birim ve birim dönüşümlerini işlemek için şu anda Pint kullanıyorum. Bu yüzdeyi temsil eden örnekPint

>>> 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')> 

Ben define my own units çalıştı için, zaten Pint tanımlanan birimleri için iyi iş gibi görünüyor. Birim dönüşümler gelince, yüzde bir yüzdelik boyutsuz bir kesirdir, bu da onu nasıl tanımladım.

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

Ancak fraksiyonun ('dimensionless') ve 'pct' arasında ileri ve geri dönüştürmek için görünmüyor olabilir.

>>> 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: '' 

Aslında yapmaktan hoşlandığım şey, örn. "0.73" ve "% 73". Böyle bir birimi nasıl tanımlayabilirim ve kullanabilirim?

cevap

5

GitHub issue hgrecco/pint#185, anlatmakta olduğunuz durumu kapsamaktadır. Kullanılması

işi-etrafında bu konuda tartışılan beni Pint-0.7.2 kullanmak için çalışır:

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') 

Çıktı: Ben pint.converters gelen `kullanılan

5 percent 
0.05 dimensionless 
+1

pint 0.8 itibariyle ScaleConverter' – nowox

+1

içe onu "pint.converters.ScaleConverter" hala kullanılabilir olduğundan pint.unit.ScaleConverter 'kaldırmış gibi görünüyor, bu yüzden çözümün geri kalanı hala geçerli. – CoryKramer