commafy.js 1.3 KB

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