/**
 * 获取相对于过去数据的比例
 * @param {number} value 当前数据
 * @param {number} preValue 之前数据
 * @returns {string} 比例
 *
 * @example
 *
 * getUnitPreviousRatio(1, 0)
 * // +999+%
 */
function getUnitPreviousRatio(value, preValue) {
  var interval = value - preValue;
  var symbol = interval > 0 ? '+' : '';
  if (preValue === 0) {
    preValue = 0.01;
  }
  var intervalRatio = (interval / preValue * 100).toFixed(1);
  if (+intervalRatio > 999) {
    intervalRatio = '999+';
  }
  return "".concat(symbol).concat(intervalRatio, "%");
}
/**
 * 获取占比
 * @param {number} summary 总数据
 * @param {number} part 部分数据
 * @returns {number} 比例
 * @example
 * getRatio(0, 1)
 * // 0
 *
 * getRatio(1, 0)
 * // 0
 *
 * getRatio(1, 1)
 * // 100
 *
 * getRatio(1, .5)
 * // 50
 */
function getPartRatio(summary, part) {
  if (!summary) return 0;
  if (!part) return 0;
  return +(part / summary * 100).toFixed(2);
}
/**
 *
 * 阿拉伯数字和中文数字映射表，0 - 32
 * @type {object}
 * @example
 *
 * console.log(NUMBER_CHI_MAP[1]);
 * // '一'
 *
 * console.log(NUMBER_CHI_MAP[2]);
 * // '二'
 */
var NUMBER_CHI_MAP = {
  0: '零',
  1: '一',
  2: '二',
  3: '三',
  4: '四',
  5: '五',
  6: '六',
  7: '七',
  8: '八',
  9: '九',
  10: '十',
  11: '十一',
  12: '十二',
  13: '十三',
  14: '十四',
  15: '十五',
  16: '十六',
  17: '十七',
  18: '十八',
  19: '十九',
  20: '二十',
  21: '二十一',
  22: '二十二',
  23: '二十三',
  24: '二十四',
  25: '二十五',
  26: '二十六',
  27: '二十七',
  28: '二十八',
  29: '二十九',
  30: '三十',
  31: '三十一',
  32: '三十二'
};
/**
 * 获取千分位分隔符
 * @param {string | number} value 输入数字
 * @returns {string} 处理后的数字
 *
 * @example
 *
 * getThousandSeparator('123123123')
 *
 * // => 123,123,123
 *
 * getThousandSeparator('12312312')
 *
 * // => 12,312,312
 */
function getThousandSeparator(value) {
  var str = "".concat(value);
  // 分割整数和小数部分
  var parts = str.split('.');
  // 只对整数部分添加千分位分隔符
  parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
  // 重新组合整数和小数部分
  return parts.join('.');
}
/**
 * 获取千分位分隔符，处理数字之间有空格的情况
 * @param {string | number} value 输入数字
 * @returns {string} 处理后的数字
 *
 * @example
 * getThousandSeparator2('12345678 123456789')
 *
 * // => 12,345,678 123,456,789
 *
 */
function getThousandSeparator2(value) {
  var reg = /\B(?=(\d{3})+\b)/g;
  return "".concat(value).replace(reg, ',');
}
/**
 * 在区间内获取随机整数
 * @param {number} min 最小值
 * @param {number} max 最大值
 * @returns 随机数
 *
 * @example
 * ```ts
 * random(0, 19) // 1
 * ```
 */
function random(min, max) {
  if (min >= 0 && max > 0 && max >= min) {
    var gap = max - min + 1;
    return Math.floor(Math.random() * gap + min);
  }
  return 0;
}
/**
 * 在区间内获取随机浮点数
 * @param min - 最小值
 * @param max - 最大值
 * @returns 随机浮点数
 * @example
 * ```ts
 * getRandomNumber(0, 10); // 3.456789
 * getRandomNumber(1.5, 5.5); // 2.789123
 * ```
 */
function getRandomNumber(min, max) {
  var result = Math.random() * (max - min) + min;
  return result;
}
/**
 * 数字左侧加 0，直到满足长度要求
 * @param {string | number} num 当前数字
 * @param {number} [targetLength=2] 目标长度
 * @returns {string} 新的字符串
 * @example
 * ```ts
 * padZero(1, 3); // 001
 * ```
 */
function padZero(num) {
  var targetLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
  var str = "".concat(num);
  while (str.length < targetLength) {
    str = "0".concat(str);
  }
  return str;
}
/**
 * add num and avoid float number
 * @param {number} num1 第1个数字
 * @param {number} num2 第2个数字
 * @returns {number} 结果
 * @example
 * ```ts
 * addNumber(0.1, 0.2); // 0.3
 * ```
 */
function addNumber(num1, num2) {
  var cardinal = Math.pow(10, 10);
  return Math.round((num1 + num2) * cardinal) / cardinal;
}
/**
 * 根据边界值修正数字
 * @param {number} num 待处理的数字
 * @param {number} min 边界最小值
 * @param {number} max 边界最大值
 * @returns {number} 处理结果
 * @example
 * ```ts
 * range(12, 1, 2); // 2
 * ```
 */
function range(num, min, max) {
  return Math.min(Math.max(num, min), max);
}

export { NUMBER_CHI_MAP, addNumber, getPartRatio, getRandomNumber, getThousandSeparator, getThousandSeparator2, getUnitPreviousRatio, padZero, random, range };
