diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index 9474918b8277..6d2b74e5ae77 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -82,6 +82,8 @@ function currencyFilter($locale) { * * If the input is not a number an empty string is returned. * + * If the input is an infinite (Infinity/-Infinity) the Infinity symbol '∞' is returned. + * * @param {number|string} number Number to format. * @param {(number|string)=} fractionSize Number of decimal places to round the number to. * If this is not provided then the fraction size is computed from the current locale's number @@ -138,16 +140,22 @@ function numberFilter($locale) { var DECIMAL_SEP = '.'; function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (!isFinite(number) || isObject(number)) return ''; + if (isObject(number)) return ''; var isNegative = number < 0; number = Math.abs(number); + + var isInfinity = number === Infinity; + if (!isInfinity && !isFinite(number)) return ''; + var numStr = number + '', formatedText = '', + hasExponent = false, parts = []; - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { + if (isInfinity) formatedText = '\u221e'; + + if (!isInfinity && numStr.indexOf('e') !== -1) { var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); if (match && match[2] == '-' && match[3] > fractionSize + 1) { number = 0; @@ -157,7 +165,7 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { } } - if (!hasExponent) { + if (!isInfinity && !hasExponent) { var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; // determine fractionSize if it is not specified diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index 977055bf1b81..f99eacb19dee 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -150,10 +150,10 @@ describe('filters', function() { expect(number(Number.NaN)).toEqual(''); expect(number({})).toEqual(''); expect(number([])).toEqual(''); - expect(number(+Infinity)).toEqual(''); - expect(number(-Infinity)).toEqual(''); + expect(number(+Infinity)).toEqual('∞'); + expect(number(-Infinity)).toEqual('-∞'); expect(number("1234.5678")).toEqual('1,234.568'); - expect(number(1 / 0)).toEqual(""); + expect(number(1 / 0)).toEqual('∞'); expect(number(1, 2)).toEqual("1.00"); expect(number(.1, 2)).toEqual("0.10"); expect(number(.01, 2)).toEqual("0.01");