From ae952fbf0be925a48743d1c925ffe4e31a42c280 Mon Sep 17 00:00:00 2001 From: Smitha Milli Date: Sat, 23 Aug 2014 10:10:21 -0500 Subject: [PATCH] fix(numberFilter): format numbers that round to zero as nonnegative Previously when a negative number was rounded to 0 by the number filter it would be formated as a negative number. This means something like {{ -0.01 | number: 1 }} would output -0.0. Now it will ouput 0.0 instead. Closes #8489 --- src/ng/filter/filters.js | 4 ++++ test/ng/filter/filtersSpec.js | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index 6a1d2eb16acc..17fcfe362e4d 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -161,6 +161,10 @@ 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] || ''; diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index 6f48bc826749..d90143744d44 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -83,6 +83,11 @@ describe('filters', function() { num = formatNumber(123.1, pattern, ',', '.', 3); expect(num).toBe('123.100'); }); + + it('should format numbers that round to zero as nonnegative', function(){ + var num = formatNumber(-0.01, pattern, ',', '.', 1); + expect(num).toBe('0.0'); + }); }); describe('currency', function() { @@ -184,7 +189,7 @@ describe('filters', function() { expect(number(1e-6, 6)).toEqual('0.000001'); expect(number(1e-7, 6)).toEqual('0.000000'); - expect(number(-1e-50, 0)).toEqual('-0'); + expect(number(-1e-50, 0)).toEqual('0'); expect(number(-1e-6, 6)).toEqual('-0.000001'); expect(number(-1e-7, 6)).toEqual('-0.000000'); });