diff options
| author | Braden Shepherdson | 2012-10-19 14:29:37 -0400 |
|---|---|---|
| committer | Misko Hevery | 2012-10-26 08:51:28 -0700 |
| commit | bca1604c12262b66ce3b8004994fb4841fb8b87d (patch) | |
| tree | 1adda119e2bb1b55b72b0764f5821ff414eb9faa /test | |
| parent | f4517b500c0d2357d89e8c889f32f1466e5c1612 (diff) | |
| download | angular.js-bca1604c12262b66ce3b8004994fb4841fb8b87d.tar.bz2 | |
fix(currency): Handle not-quite-zero values
IEEE 754 floating point sometimes results in values that are very small,
rather than zero. One example is 1.0 + 1.07 - 2.07, which returns
4.440892098500626e-16 instead of 0.
This change tweaks the number formatting logic so that an exponential
value with a negative exponent that is larger than the precision+1
returns 0 instead. For example: with precision 2, anything with an
exponent of -4, -5 or more would become 0. 9e-3 = 0.009 = 0.01, but 9e-4
= 0.0009 = 0.001 = 0.00. This detail is unlikely to matter since this
quirk is usually only triggered with values very close to zero.
Closes #1469
Diffstat (limited to 'test')
| -rw-r--r-- | test/ng/filter/filtersSpec.js | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/test/ng/filter/filtersSpec.js b/test/ng/filter/filtersSpec.js index 883e91f6..cbb41841 100644 --- a/test/ng/filter/filtersSpec.js +++ b/test/ng/filter/filtersSpec.js @@ -91,6 +91,13 @@ describe('filters', function() { expect(currency()).toBe(''); expect(currency('abc')).toBe(''); }); + + it('should handle zero and nearly-zero values properly', function() { + // This expression is known to yield 4.440892098500626e-16 instead of 0.0. + expect(currency(1.07 + 1 - 2.07)).toBe('$0.00'); + expect(currency(0.008)).toBe('$0.01'); + expect(currency(0.003)).toBe('$0.00'); + }); }); |
