diff --git a/accounting.js b/accounting.js index fd181fd..dd68416 100644 --- a/accounting.js +++ b/accounting.js @@ -216,7 +216,13 @@ var toFixed = lib.toFixed = function(value, precision) { precision = checkPrecision(precision, lib.settings.number.precision); - var exponentialForm = Number(lib.unformat(value) + 'e' + precision); + var number = lib.unformat(value); + + if (("" + number).indexOf('e') !== -1) { + return Number(number).toFixed(precision); + } + + var exponentialForm = Number(number + 'e' + precision); var rounded = Math.round(exponentialForm); var finalResult = Number(rounded + 'e-' + precision).toFixed(precision); return finalResult; diff --git a/tests/jasmine/core/formatNumberSpec.js b/tests/jasmine/core/formatNumberSpec.js index 46df133..f93ad2a 100644 --- a/tests/jasmine/core/formatNumberSpec.js +++ b/tests/jasmine/core/formatNumberSpec.js @@ -21,6 +21,14 @@ describe('formatNumber', function(){ }); + it('should handle very small numbers without producing NaN', function(){ + + expect( accounting.formatNumber(1e-7, 2) ).toBe( '0.00' ); + expect( accounting.formatNumber(0.0000001, 6) ).toBe( '0.000000' ); + expect( accounting.formatNumber(-3e-23, 2) ).toBe( '-0.00' ); + + }); + it('should work for large numbers', function(){ expect( accounting.formatNumber(123456.54321, 0) ).toBe( '123,457' );