diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index ab7fbaa79cdd..1d42415c8916 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -150,7 +150,6 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { if (numStr.indexOf('e') !== -1) { var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); if (match && match[2] == '-' && match[3] > fractionSize + 1) { - numStr = '0'; number = 0; } else { formatedText = numStr; @@ -171,10 +170,6 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize); - if (number === 0) { - isNegative = false; - } - var fraction = ('' + number).split(DECIMAL_SEP); var whole = fraction[0]; fraction = fraction[1] || ''; @@ -207,12 +202,16 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); } else { - - if (fractionSize > 0 && number > -1 && number < 1) { + if (fractionSize > 0 && number < 1) { formatedText = number.toFixed(fractionSize); + number = parseFloat(formatedText); } } + if (number === 0) { + isNegative = false; + } + parts.push(isNegative ? pattern.negPre : pattern.posPre, formatedText, isNegative ? pattern.negSuf : pattern.posSuf); diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index 32554af0949b..e5d56316388e 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -85,8 +85,10 @@ describe('filters', function() { }); it('should format numbers that round to zero as nonnegative', function() { - var num = formatNumber(-0.01, pattern, ',', '.', 1); - expect(num).toBe('0.0'); + expect(formatNumber(-0.01, pattern, ',', '.', 1)).toBe('0.0'); + expect(formatNumber(-1e-10, pattern, ',', '.', 1)).toBe('0.0'); + expect(formatNumber(-0.0001, pattern, ',', '.', 3)).toBe('0.000'); + expect(formatNumber(-0.0000001, pattern, ',', '.', 6)).toBe('0.000000'); }); }); @@ -195,10 +197,12 @@ describe('filters', function() { expect(number(1e-50, 0)).toEqual('0'); expect(number(1e-6, 6)).toEqual('0.000001'); expect(number(1e-7, 6)).toEqual('0.000000'); + expect(number(9e-7, 6)).toEqual('0.000001'); expect(number(-1e-50, 0)).toEqual('0'); expect(number(-1e-6, 6)).toEqual('-0.000001'); - expect(number(-1e-7, 6)).toEqual('-0.000000'); + expect(number(-1e-7, 6)).toEqual('0.000000'); + expect(number(-1e-8, 9)).toEqual('-0.000000010'); }); });