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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
var conversions = {
// length
'px': {
'px': 1,
'cm': 96.0/2.54,
'mm': 96.0/25.4,
'in': 96,
'pt': 96.0/72.0,
'pc': 16
},
'cm': {
'px': 2.54/96.0,
'cm': 1,
'mm': 0.1,
'in': 2.54,
'pt': 2.54/72.0,
'pc': 2.54/6.0
},
'mm': {
'px': 25.4/96.0,
'cm': 10,
'mm': 1,
'in': 25.4,
'pt': 25.4/72.0,
'pc': 25.4/6.0
},
'in': {
'px': 1.0/96.0,
'cm': 1.0/2.54,
'mm': 1.0/25.4,
'in': 1,
'pt': 1.0/72.0,
'pc': 1.0/6.0
},
'pt': {
'px': 0.75,
'cm': 72.0/2.54,
'mm': 72.0/25.4,
'in': 72,
'pt': 1,
'pc': 12
},
'pc': {
'px': 6.0/96.0,
'cm': 6.0/2.54,
'mm': 6.0/25.4,
'in': 6,
'pt': 6.0/72.0,
'pc': 1
},
// angle
'deg': {
'deg': 1,
'grad': 0.9,
'rad': 180/Math.PI,
'turn': 360
},
'grad': {
'deg': 400/360,
'grad': 1,
'rad': 200/Math.PI,
'turn': 400
},
'rad': {
'deg': Math.PI/180,
'grad': Math.PI/200,
'rad': 1,
'turn': Math.PI*2
},
'turn': {
'deg': 1/360,
'grad': 1/400,
'rad': 0.5/Math.PI,
'turn': 1
},
// time
's': {
's': 1,
'ms': 1/1000
},
'ms': {
's': 1000,
'ms': 1
},
// frequency
'Hz': {
'Hz': 1,
'kHz': 1000
},
'kHz': {
'Hz': 1/1000,
'kHz': 1
},
// resolution
'dpi': {
'dpi': 1,
'dpcm': 1.0/2.54,
'dppx': 1/96
},
'dpcm': {
'dpi': 2.54,
'dpcm': 1,
'dppx': 2.54/96.0
},
'dppx': {
'dpi': 96,
'dpcm': 96.0/2.54,
'dppx': 1
}
};
module.exports = function (value, sourceUnit, targetUnit, precision) {
if (!conversions.hasOwnProperty(targetUnit))
throw new Error("Cannot convert to " + targetUnit);
if (!conversions[targetUnit].hasOwnProperty(sourceUnit))
throw new Error("Cannot convert from " + sourceUnit + " to " + targetUnit);
var converted = conversions[targetUnit][sourceUnit] * value;
if (precision !== false) {
precision = Math.pow(10, parseInt(precision) || 5);
return Math.round(converted * precision) / precision;
}
return converted;
};
|