Changeset 1112 in main


Ignore:
Timestamp:
05/22/12 12:03:00 (7 years ago)
Author:
pcosquer
Message:

unit: add a function to convert units

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/plmapp/units.py

    r1071 r1112  
    4747) 
    4848 
     49class UnitConversionError(Exception): 
     50    """ 
     51    Exception raised if an error occurs while converting  
     52    a value from one unit to another one. 
     53    """ 
     54    pass 
     55 
     56FACTORS = { 
     57 
     58    'mm' : (0.001, 'm'), 
     59    'cm' : (0.01, 'm'), 
     60    'dm' : (0.1, 'm'), 
     61    'm' : (1., 'm'), 
     62    'km' : (1000, 'm'), 
     63 
     64    'mg' : (0.001, 'g'), 
     65    'cg' : (0.01, 'g'), 
     66    'dg' : (0.1, 'g'), 
     67    'g' : (1., 'g'), 
     68    'kg' : (1000, 'g'), 
     69     
     70    'mol' : (6.0221404e23, '-'), 
     71    '-' : (1., '-'), 
     72 
     73    'm3' : (1000., 'L'), 
     74    'mL' : (0.001, 'L'), 
     75    'cL' : (0.01, 'L'), 
     76    'dL' : (0.1, 'L'), 
     77    'L' : (1., 'L'), 
     78    } 
     79 
     80def convert_unit(value, original_unit, new_unit): 
     81    """ 
     82    Converts a value expressed in *original_unit* to 
     83    *new_unit* 
     84 
     85    :raises: :exc:`UnitConversionError` if the conversion is not 
     86             possible. 
     87 
     88        >>> convert_unit(1, 'm', 'mm') 
     89        1000.0 
     90        >>> convert_unit(5, 'dm', 'mm') 
     91        500.0 
     92        >>> convert_unit(5, 'dL', 'm3') 
     93        0.00050000000000000001 
     94        >>> convert_unit(5, 'dL', 'kg') 
     95        ------------------------------------------------------------ 
     96        Traceback (most recent call last): 
     97          File "<ipython console>", line 1, in <module> 
     98          File "/home/pcosquer/openPLM/trunk/openPLM/../openPLM/plmapp/units.py", line 80, in convert_unit 
     99            def convert_unit(value, original_unit, new_unit): 
     100        UnitConversionError: Inconsistent units (dL, kg) 
     101    """ 
     102    factor1, base1 = FACTORS[original_unit] 
     103    factor2, base2 = FACTORS[new_unit] 
     104    if base1 != base2: 
     105        raise UnitConversionError("Inconsistent units (%s, %s)" % (original_unit, new_unit)) 
     106    return value * factor1 / factor2 
     107 
Note: See TracChangeset for help on using the changeset viewer.