From a13c01a8e48ea4a0d59394eb94f1b12c50cfef61 Mon Sep 17 00:00:00 2001 From: Paul Meskers Date: Sun, 9 Jun 2013 16:20:40 -0400 Subject: [PATCH] fix(numberFilter): always convert scientific notation to decimal Previously, the number filter would format small and large numbers as scientific notation. It now uses toFixed() to ensure that all requested digits are shown. --- src/ng/filter/filters.js | 5 +++++ test/ng/filter/filtersSpec.js | 21 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/ng/filter/filters.js b/src/ng/filter/filters.js index f2c871105d18..8afe2a0ffab5 100644 --- a/src/ng/filter/filters.js +++ b/src/ng/filter/filters.js @@ -171,6 +171,11 @@ 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) { + formatedText = number.toFixed(fractionSize); + } } parts.push(isNegative ? pattern.negPre : pattern.posPre); diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index eb98c355d7ec..598837994247 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -145,9 +145,24 @@ describe('filters', function() { expect(number(1234.567, 2)).toEqual("1,234.57"); }); - it('should filter exponential numbers', function() { - expect(number(1e50, 0)).toEqual('1e+50'); - expect(number(-2e50, 2)).toEqual('-2e+50'); + it('should filter exponentially large numbers', function() { + expect(number(1e50)).toEqual('1e+50'); + expect(number(-2e100)).toEqual('-2e+100'); + }); + + it('should ignore fraction sizes for large numbers', function() { + expect(number(1e50, 2)).toEqual('1e+50'); + expect(number(-2e100, 5)).toEqual('-2e+100'); + }); + + it('should filter exponentially small numbers', 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(-1e-50, 0)).toEqual('-0'); + expect(number(-1e-6, 6)).toEqual('-0.000001'); + expect(number(-1e-7, 6)).toEqual('-0.000000'); }); });