-
Notifications
You must be signed in to change notification settings - Fork 0
/
number.ts
70 lines (64 loc) · 2.34 KB
/
number.ts
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import { isEmpty } from "./common"
import { strOrNumType } from "./interface"
/**
* @group 【number】
* @category 判断是否是number(纯数字字符串也算number)
* @param {any} params 传入的内容
* @return {boolean} 是否是number
*/
export const isNumber = (params: any): boolean => {
if (isEmpty(params) || (typeof params !== 'number' && typeof params !== 'string')) {
return false
}
return !isNaN(+params)
}
/**
* @group 【number】
* @category 数字小于10进行自动补零
* @param {number} params 要补零的数字
* @return {string} 补零后的数字
*/
export const padNumber = (params: number): string => (params < 10 ? '0' + params : params + '')
/**
* @group 【number】
* @category 获取数字的长度
* @param {number} params 传入的数字
* @return {number} 数字的长度
*/
export const getNumberLength = (params: number): number => (params + '').length
/**
* @group 【number】
* @category 保留小数
* @param {number} params 传入的数字
* @param {number} decimalNum 小数位数,默认两位
* @return {number} 保留小数后的位数
*/
export const numberToFiexd = (params: number, decimalNum: number = 2): number => {
if (!isNumber(params)) {
throw new Error('不是数字')
}
return Math.round(+params * Math.pow(10, decimalNum)) / Math.pow(10, decimalNum)
}
/**
* @group 【number】
* @category 数字增加千分位
* @param {number} params 传入的数字
* @param {number} decimalNum 小数位数,默认0位
* @return {string} 增加千分位后的数字
*/
export const numberAddThousandSeparator = (params: number, decimalNum: number = 0): string => {
const parts = (numberToFiexd(params, decimalNum) + '').split('.')
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',')
return parts.join('.')
}
/**
* @group 【number】
* @category 格式化数字
* @param {number} params 传入的数字
* @param {number} decimalNum 小数位数,默认2位
* @param {boolean} needThousandSeparator 是否需要增加千分位
* @return {strOrNumType} 格式化后的数字【如果增加千分位,则返回string】
*/
export const formatNumber = (params: number, decimalNum: number = 2, needThousandSeparator: boolean = false): strOrNumType => {
return needThousandSeparator ? numberAddThousandSeparator(params, decimalNum) : numberToFiexd(params, decimalNum)
}