commafy.js 1.4 KB

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