瀏覽代碼

return empty string for infinity and properly format values such as 0.999

Alexander Shepelin 11 年之前
父節點
當前提交
3e110f5a8e
共有 2 個文件被更改,包括 6 次插入3 次删除
  1. 3 2
      src/filters/index.js
  2. 3 1
      test/unit/specs/filters/filters_spec.js

+ 3 - 2
src/filters/index.js

@@ -61,14 +61,15 @@ var digitsRE = /(\d{3})(?=\d)/g
 
 exports.currency = function (value, sign) {
   value = parseFloat(value)
-  if (!value && value !== 0) return ''
+  if (!isFinite(value) || (!value && value !== 0)) return ''
   sign = sign || '$'
   var s = Math.floor(Math.abs(value)).toString(),
     i = s.length % 3,
     h = i > 0
       ? (s.slice(0, i) + (s.length > 3 ? ',' : ''))
       : '',
-    f = '.' + value.toFixed(2).slice(-2)
+	v = Math.abs(parseInt((value * 100) % 100, 10)),
+    f = '.' + (v < 10 ? ('0' + v) : v)
   return (value < 0 ? '-' : '') +
     sign + h + s.slice(i).replace(digitsRE, '$1,') + f
 }

+ 3 - 1
test/unit/specs/filters/filters_spec.js

@@ -62,13 +62,15 @@ describe('Filters', function () {
     expect(filter(1234)).toBe('$1,234.00')
     expect(filter(1234.45)).toBe('$1,234.45')
     expect(filter(123443434.4343434)).toBe('$123,443,434.43')
+    expect(filter(0.99999)).toBe('$0.99')
     // sign arg
     expect(filter(2134, '@')).toBe('@2,134.00')
-    // falsy and 0
+    // falsy, infinity and 0
     expect(filter(0)).toBe('$0.00')
     expect(filter(false)).toBe('')
     expect(filter(null)).toBe('')
     expect(filter(undefined)).toBe('')
+    expect(filter(Infinity)).toBe('')
     // negative numbers
     expect(filter(-50)).toBe('-$50.00')
     expect(filter(-150.43)).toBe('-$150.43')