Changed scientific notation of number formatting back

This commit is contained in:
josdejong 2013-10-21 20:51:48 +02:00
parent 17f208df18
commit 1db989a2d7
3 changed files with 17 additions and 24 deletions

View File

@ -68,28 +68,16 @@ exports.format = function format(value, precision) {
}
var abs = Math.abs(value);
if (abs > 1e-3 && abs < 9007199254740992) {
// note: 2^53 = 9007199254740992,
// see http://blog.vjeux.com/2010/javascript/javascript-max_int-number-limits.html
if (abs > 1e-3 && abs < 1e5) {
// normal number notation
var str = exports.toPrecision(value, precision);
// if number does not end with a lot of zeros we will return it,
// else we will use scientific notation.
if (!(/00000$/.test(str))) {
return str;
}
return exports.toPrecision(value, precision);
}
else {
// too small and too large values need scientific notation anyway,
// let's not perform an expensive stringify operation on these values.
// scientific notation
var exp = Math.floor(Math.log(abs) / Math.LN10);
var v = value / (Math.pow(10, exp));
return exports.toPrecision(v, precision) + 'e' + exp;
}
// scientific notation
var exp = Math.floor(Math.log(abs) / Math.LN10);
var v = value / (Math.pow(10, exp));
return exports.toPrecision(v, precision) + 'e' + exp;
};
/**

View File

@ -31,7 +31,7 @@ describe('string', function() {
it('should convert a number to string', function() {
assert.equal(string(1/8), '0.125');
assert.equal(string(2.1e-3), '0.0021');
assert.equal(string(123456789), '123456789');
assert.equal(string(123456789), '1.23456789e8');
assert.equal(string(2000000), '2e6');
});

View File

@ -110,13 +110,15 @@ describe('number', function() {
assert.equal(number.format(2.3e2), '230');
assert.equal(number.format(2.3e3), '2300');
assert.equal(number.format(2.3e4), '23000');
assert.equal(number.format(2.3e5), '230000');
assert.equal(number.format(2.3e5), '2.3e5');
assert.equal(number.format(2.3e6), '2.3e6');
assert.equal(number.format(1234567), '1234567');
assert.equal(number.format(1.000000012), '1.000000012');
assert.equal(number.format(1000000012), '1.000000012e9');
assert.equal(number.format(123456789123456), '123456789123456');
assert.equal(number.format(1234567), '1.234567e6');
assert.equal(number.format(123456789123456), '1.23456789123456e14');
assert.equal(number.format(123456789123456e-14), '1.23456789123456');
assert.equal(number.format(123456789123456789), '1.234567891234568e17');
});
@ -125,15 +127,18 @@ describe('number', function() {
assert.equal(number.format(1/3, 3), '0.333');
assert.equal(number.format(1/3, 4), '0.3333');
assert.equal(number.format(1/3, 5), '0.33333');
assert.equal(number.format(0.9999e6), '9.999e5');
assert.equal(number.format(1.111e6), '1.111e6');
assert.equal(number.format(1000.000, 5), '1000');
assert.equal(number.format(1000.0010, 5), '1000'); // rounded off at 5 digits
assert.equal(number.format(1234, 3), '1230');
assert.equal(number.format(0.001234, 3), '0.00123');
assert.equal(number.format(1234567), '1234567');
assert.equal(number.format(1234567, 4), '1235000');
assert.equal(number.format(1234567), '1.234567e6');
assert.equal(number.format(1234567, 4), '1.235e6');
assert.equal(number.format(1234567, 2), '1.2e6');
assert.equal(number.format(1234, 2), '1200');
});
});