t-comm
Version:
专业、稳定、纯粹的工具库
218 lines (214 loc) • 4.68 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
/**
* 获取相对于过去数据的比例
* @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;
}
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, targetLength) {
if (targetLength === void 0) {
targetLength = 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);
}
exports.NUMBER_CHI_MAP = NUMBER_CHI_MAP;
exports.addNumber = addNumber;
exports.getPartRatio = getPartRatio;
exports.getRandomNumber = getRandomNumber;
exports.getThousandSeparator = getThousandSeparator;
exports.getThousandSeparator2 = getThousandSeparator2;
exports.getUnitPreviousRatio = getUnitPreviousRatio;
exports.padZero = padZero;
exports.random = random;
exports.range = range;