mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-25 15:07:57 +00:00
Changed scientific notation of number formatting back
This commit is contained in:
parent
17f208df18
commit
1db989a2d7
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -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');
|
||||
});
|
||||
|
||||
|
||||
@ -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');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user