Skip to content

Commit 81aa6e6

Browse files
committed
fix currency filter (fix #953)
1 parent be6c031 commit 81aa6e6

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/filters/index.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,21 @@ exports.lowercase = function (value) {
5858
*/
5959

6060
var digitsRE = /(\d{3})(?=\d)/g
61-
62-
exports.currency = function (value, sign) {
61+
exports.currency = function (value, currency) {
6362
value = parseFloat(value)
6463
if (!isFinite(value) || (!value && value !== 0)) return ''
65-
sign = sign || '$'
66-
var s = Math.floor(Math.abs(value)).toString(),
67-
i = s.length % 3,
68-
h = i > 0
69-
? (s.slice(0, i) + (s.length > 3 ? ',' : ''))
70-
: '',
71-
v = Math.abs(parseInt((value * 100) % 100, 10)),
72-
f = '.' + (v < 10 ? ('0' + v) : v)
73-
return (value < 0 ? '-' : '') +
74-
sign + h + s.slice(i).replace(digitsRE, '$1,') + f
64+
currency = currency || '$'
65+
var stringified = Math.abs(value).toFixed(2)
66+
var _int = stringified.slice(0, -3)
67+
var i = _int.length % 3
68+
var head = i > 0
69+
? (_int.slice(0, i) + (_int.length > 3 ? ',' : ''))
70+
: ''
71+
var _float = stringified.slice(-3)
72+
var sign = value < 0 ? '-' : ''
73+
return currency + sign + head +
74+
_int.slice(i).replace(digitsRE, '$1,') +
75+
_float
7576
}
7677

7778
/**

test/unit/specs/filters/filters_spec.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ describe('Filters', function () {
6262
expect(filter(1234)).toBe('$1,234.00')
6363
expect(filter(1234.45)).toBe('$1,234.45')
6464
expect(filter(123443434.4343434)).toBe('$123,443,434.43')
65-
expect(filter(0.99999)).toBe('$0.99')
65+
expect(filter(0.99)).toBe('$0.99')
66+
expect(filter(0.99999)).toBe('$1.00')
67+
expect(filter(0.76)).toBe('$0.76')
6668
// sign arg
6769
expect(filter(2134, '@')).toBe('@2,134.00')
6870
// falsy, infinity and 0
@@ -72,9 +74,9 @@ describe('Filters', function () {
7274
expect(filter(undefined)).toBe('')
7375
expect(filter(Infinity)).toBe('')
7476
// negative numbers
75-
expect(filter(-50)).toBe('-$50.00')
76-
expect(filter(-150.43)).toBe('-$150.43')
77-
expect(filter(-1500.4343434)).toBe('-$1,500.43')
77+
expect(filter(-50)).toBe('$-50.00')
78+
expect(filter(-150.43)).toBe('$-150.43')
79+
expect(filter(-1500.4343434)).toBe('$-1,500.43')
7880
})
7981

8082
it('key', function () {

0 commit comments

Comments
 (0)