aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorBraden Shepherdson2012-10-19 14:29:37 -0400
committerIgor Minar2012-10-29 19:37:52 -0700
commit45a8db9c0814549425542bdb301af9d4a2b50f47 (patch)
treee40e3abe1417419b6e0d927adfb1da44628aeb91 /test
parentd930a410fb343d282e0d35e0d8848a1d6fb24b86 (diff)
downloadangular.js-45a8db9c0814549425542bdb301af9d4a2b50f47.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.js7
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');
+ });
});