Skip to content

Commit

Permalink
Merge pull request #26 from kojung/feature/beyond-tera
Browse files Browse the repository at this point in the history
Added support for larger suffixes beyond Tera
slightlynybbled authored Oct 31, 2023
2 parents 04630e2 + bdcf90c commit bbc9206
Showing 2 changed files with 34 additions and 16 deletions.
38 changes: 22 additions & 16 deletions engineering_notation/engineering_notation.py
Original file line number Diff line number Diff line change
@@ -20,23 +20,29 @@
'k': 'e3',
'M': 'e6',
'G': 'e9',
'T': 'e12'
'T': 'e12',
'P': 'e15',
'E': 'e18',
'Z': 'e21',
}

_exponent_lookup_scaled = {
'-48': 'y',
'-45': 'z',
'-42': 'a',
'-39': 'f',
'-36': 'p',
'-33': 'n',
'-30': 'u',
'-27': 'm',
'-24': '',
'-21': 'k',
'-18': 'M',
'-15': 'G',
'-12': 'T'
'-54': 'y',
'-51': 'z',
'-48': 'a',
'-45': 'f',
'-42': 'p',
'-39': 'n',
'-36': 'u',
'-33': 'm',
'-30': '',
'-27': 'k',
'-24': 'M',
'-21': 'G',
'-18': 'T',
'-15': 'P',
'-12': 'E',
'-9': 'Z',
}


@@ -301,7 +307,7 @@ def __init__(self, value,
suffix_keys = [key for key in _suffix_lookup.keys() if key != '']

for suffix in suffix_keys:
if suffix in value:
if suffix == value[-1]:
value = value[:-1] + _suffix_lookup[suffix]
break

@@ -345,7 +351,7 @@ def __repr__(self):
# since Decimal class only really converts number that are very small
# into engineering notation, then we will simply make all number a
# small number and take advantage of Decimal class
num_str = self.number * Decimal('10e-25')
num_str = self.number * Decimal('10e-31')
num_str = num_str.to_eng_string().lower()

base, exponent = num_str.split('e')
12 changes: 12 additions & 0 deletions tests/test_engnum.py
Original file line number Diff line number Diff line change
@@ -97,6 +97,18 @@ def test_new_units():
assert str(EngNumber('220y')) == '220y'
assert str(EngNumber(0.000000000000000000000220)) == '220y'

# testing peta
assert str(EngNumber('220P')) == '220P'
assert str(EngNumber(1e15)) == '1P'

# testing exxa
assert str(EngNumber('220E')) == '220E'
assert str(EngNumber(1e18)) == '1E'

# testing zetta
assert str(EngNumber('220Z')) == '220Z'
assert str(EngNumber(1e21)) == '1Z'

# wrap it all up
assert str(EngNumber('1f') + EngNumber('330a')) == '1.33f'
assert str(EngNumber('3z') + EngNumber('440y')) == '3.44z'

0 comments on commit bbc9206

Please sign in to comment.