Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 96c61fe

Browse files
fix(numberFilter): numbers rounding to zero shouldn't be negative
Closes #10278
1 parent 915a891 commit 96c61fe

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src/ng/filter/filters.js

+6-7
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
150150
if (numStr.indexOf('e') !== -1) {
151151
var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
152152
if (match && match[2] == '-' && match[3] > fractionSize + 1) {
153-
numStr = '0';
154153
number = 0;
155154
} else {
156155
formatedText = numStr;
@@ -171,10 +170,6 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
171170
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
172171
number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
173172

174-
if (number === 0) {
175-
isNegative = false;
176-
}
177-
178173
var fraction = ('' + number).split(DECIMAL_SEP);
179174
var whole = fraction[0];
180175
fraction = fraction[1] || '';
@@ -207,12 +202,16 @@ function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
207202

208203
if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
209204
} else {
210-
211-
if (fractionSize > 0 && number > -1 && number < 1) {
205+
if (fractionSize > 0 && number < 1) {
212206
formatedText = number.toFixed(fractionSize);
207+
number = parseFloat(formatedText);
213208
}
214209
}
215210

211+
if (number === 0) {
212+
isNegative = false;
213+
}
214+
216215
parts.push(isNegative ? pattern.negPre : pattern.posPre,
217216
formatedText,
218217
isNegative ? pattern.negSuf : pattern.posSuf);

test/ng/filter/filtersSpec.js

+7-3
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,10 @@ describe('filters', function() {
8585
});
8686

8787
it('should format numbers that round to zero as nonnegative', function() {
88-
var num = formatNumber(-0.01, pattern, ',', '.', 1);
89-
expect(num).toBe('0.0');
88+
expect(formatNumber(-0.01, pattern, ',', '.', 1)).toBe('0.0');
89+
expect(formatNumber(-1e-10, pattern, ',', '.', 1)).toBe('0.0');
90+
expect(formatNumber(-0.0001, pattern, ',', '.', 3)).toBe('0.000');
91+
expect(formatNumber(-0.0000001, pattern, ',', '.', 6)).toBe('0.000000');
9092
});
9193
});
9294

@@ -195,10 +197,12 @@ describe('filters', function() {
195197
expect(number(1e-50, 0)).toEqual('0');
196198
expect(number(1e-6, 6)).toEqual('0.000001');
197199
expect(number(1e-7, 6)).toEqual('0.000000');
200+
expect(number(9e-7, 6)).toEqual('0.000001');
198201

199202
expect(number(-1e-50, 0)).toEqual('0');
200203
expect(number(-1e-6, 6)).toEqual('-0.000001');
201-
expect(number(-1e-7, 6)).toEqual('-0.000000');
204+
expect(number(-1e-7, 6)).toEqual('0.000000');
205+
expect(number(-1e-8, 9)).toEqual('-0.000000010');
202206
});
203207
});
204208

0 commit comments

Comments
 (0)