src/format/intWord.ts

Summary

Maintainability
A
50 mins
Test Coverage
import number from './number'
import type { TextNumber } from '~/internal/types'

const UnitsDefault = ['', 'K', 'M', 'B', 'T']
/**
 * Format
 * @param {Number|String} value
 * @param {Array} units
 * @param {Number} kilo
 * @param {Number} decimals
 * @param {String} decPoint
 * @param {String} thousandsSeparator
 * @param {String} suffixSeparator
 * @returns {string}
 */
export default function intWord(
  value: TextNumber,
  units: string[] = UnitsDefault,
  kilo: number = 1000,
  decimals: number = 2,
  decPoint: string = '.',
  thousandsSeparator: string = ',',
  suffixSeparator: string = ''
): string {
  let unit = units.length - 1
  decimals = isNaN(decimals) ? 2 : Math.abs(decimals)
  const num = +value

  for (let i = 0; i < units.length; i++) {
    if (num < kilo ** (i + 1)) {
      unit = i
      break
    }
  }

  const humanized = num / kilo ** unit
  const suffix = units[unit] ? suffixSeparator + units[unit] : ''

  return number(humanized, decimals, decPoint, thousandsSeparator) + suffix
}