UNPKG

1.33 kBJavaScriptView Raw
1var round = require('./round')
2var ceil = require('./ceil')
3var floor = require('./floor')
4
5var isNumber = require('./isNumber')
6var toValueString = require('./toValueString')
7var toFixed = require('./toFixed')
8
9var toNumberString = require('./toNumberString')
10
11/**
12 * 千分位分隔符、小数点
13 *
14 * @param {String/Number} num 数值
15 * @param {CommafyOptions} options 参数
16 * @return {String}
17 */
18function commafy(num, options) {
19 var opts = options || {}
20 var optDigits = opts.digits
21 var isNum = isNumber(num)
22 var rest, result, isNegative, intStr, floatStr
23 if (isNum) {
24 rest = (opts.ceil ? ceil : (opts.floor ? floor : round))(num, optDigits)
25 result = toNumberString(optDigits ? toFixed(rest, optDigits) : rest).split('.')
26 intStr = result[0]
27 floatStr = result[1]
28 isNegative = intStr && rest < 0
29 if (isNegative) {
30 intStr = intStr.substring(1, intStr.length)
31 }
32 } else {
33 rest = toValueString(num).replace(/,/g, '')
34 result = rest ? [rest] : []
35 intStr = result[0]
36 }
37 if (result.length) {
38 return (isNegative ? '-' : '') + intStr.replace(new RegExp('(?=(?!(\\b))(.{' + (opts.spaceNumber || 3) + '})+$)', 'g'), (opts.separator || ',')) + (floatStr ? ('.' + floatStr) : '')
39 }
40 return rest
41}
42
43module.exports = commafy