Skip to content

Commit 0a463fa

Browse files
committed
support scientific notation in number values
Fixes #37
1 parent c2738fb commit 0a463fa

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

lib/unit.js

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,47 @@
11
var minus = '-'.charCodeAt(0);
22
var plus = '+'.charCodeAt(0);
33
var dot = '.'.charCodeAt(0);
4+
var exp = 'e'.charCodeAt(0);
5+
var EXP = 'E'.charCodeAt(0);
46

57
module.exports = function (value) {
68
var pos = 0;
79
var length = value.length;
810
var dotted = false;
11+
var sciPos = -1;
912
var containsNumber = false;
1013
var code;
11-
var number = '';
1214

1315
while (pos < length) {
1416
code = value.charCodeAt(pos);
1517

1618
if (code >= 48 && code <= 57) {
17-
number += value[pos];
1819
containsNumber = true;
20+
} else if (code === exp || code === EXP) {
21+
if (sciPos > -1) {
22+
break;
23+
}
24+
sciPos = pos;
1925
} else if (code === dot) {
2026
if (dotted) {
2127
break;
2228
}
2329
dotted = true;
24-
number += value[pos];
2530
} else if (code === plus || code === minus) {
2631
if (pos !== 0) {
2732
break;
2833
}
29-
number += value[pos];
3034
} else {
3135
break;
3236
}
3337

3438
pos += 1;
3539
}
3640

41+
if (sciPos + 1 === pos) pos--;
42+
3743
return containsNumber ? {
38-
number: number,
44+
number: value.slice(0, pos),
3945
unit: value.slice(pos)
4046
} : false;
4147
};

test/unit.js

+15
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,21 @@ var tests = [{
2525
}, {
2626
fixture: '.rem',
2727
expected: false
28+
}, {
29+
fixture: '1e4px',
30+
expected: { number: '1e4', unit: 'px' }
31+
}, {
32+
fixture: '1em',
33+
expected: { number: '1', unit: 'em' }
34+
}, {
35+
fixture: '1e10',
36+
expected: { number: '1e10', unit: '' }
37+
}, {
38+
fixture: '',
39+
expected: false
40+
}, {
41+
fixture: 'e',
42+
expected: false
2843
}];
2944

3045
test('Unit', function (t) {

0 commit comments

Comments
 (0)