forked from E2OpenPlugins/e2openplugin-FileCommander
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUnitConversions.py
More file actions
91 lines (78 loc) · 1.85 KB
/
UnitConversions.py
File metadata and controls
91 lines (78 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from __future__ import print_function
class UnitMultipliers:
Si = (
("", 10 ** 0),
("k", 10 ** 3),
("M", 10 ** 6),
("G", 10 ** 9),
("T", 10 ** 12),
("P", 10 ** 15),
("E", 10 ** 18),
("Z", 10 ** 21),
("Y", 10 ** 24)
)
SiFull = (
("y", 10 ** -24),
("z", 10 ** -21),
("a", 10 ** -18),
("f", 10 ** -15),
("p", 10 ** -12),
("n", 10 ** -9),
("u", 10 ** -6),
("m", 10 ** -3),
) + Si
Iec = (
("", 1024 ** 0),
("Ki", 1024 ** 1),
("Mi", 1024 ** 2),
("Gi", 1024 ** 3),
("Ti", 1024 ** 4),
("Pi", 1024 ** 5),
("Ei", 1024 ** 6),
("Zi", 1024 ** 7),
("Yi", 1024 ** 8),
)
Jedec = (
("", 1024 ** 0),
("K", 1024 ** 1),
("M", 1024 ** 2),
("G", 1024 ** 3),
("T", 1024 ** 4),
("P", 1024 ** 5),
("E", 1024 ** 6),
("Z", 1024 ** 7),
("Y", 1024 ** 8),
)
Default = Si
class UnitScaler:
def __init__(self, scaleTable=UnitMultipliers.Default, firstScaleIndex=1, maxNumLen=4, decimals=0):
self.scaleTable = scaleTable
self.firstScaleIndex = min(firstScaleIndex, len(scaleTable) - 1)
self.maxNumLen = max(maxNumLen, 3)
self.decimals = decimals
self.maxVal = 10 ** maxNumLen
def scale(self, num):
negative = num < 0
if negative:
num = -num
i = self.firstScaleIndex
scaledNum = round(float(num) / self.scaleTable[i][1], self.decimals)
while scaledNum >= self.maxVal and i < len(self.scaleTable) - 1:
i += 1
scaledNum = round(float(num) / self.scaleTable[i][1], self.decimals)
if negative:
scaledNum = -scaledNum
return ("%.*f" % (self.decimals, scaledNum), self.scaleTable[i][0])
def __call__(self, num):
return self.scale(num)
if __name__ == "__main__":
import sys
sys.argv.pop(0)
kwargs = {}
while '=' in sys.argv[0]:
(arg, val) = sys.argv.pop(0).split("=", 1)
kwargs[arg] = eval(val)
scaler = UnitScaler(**kwargs)
for arg in sys.argv:
val = eval(arg)
print(arg, val, scaler(val))