有些数字过大,超过jsNumber类型的位数限制需要比较数字大小时实用
有些金额的数据返回的是千分位逗号分割的String (例如:123,456,789.99)无法直接比较大小或者运算
这里提供两个方法,
一、千分位字符的String转换为Number类型
**
* 去除千分位格式 ,
*/
const delnumFormat = (num: string | number) => {
if (num && num != 'undefined' && num != 'null') {
let numS = num
numS = numS.toString()
numS = numS.replace(/,/gi, '')
return numS
} else {
return num
}
}
二、字符串的数值,或者产出js运算位数的数值比较大小
/**
* 大数据比较大小,支持千分位数字
* a<b返回 -1
* a==b 返回 0
* a>b 返回 1
*/
const bigNumCompare = (_a: string | number, _b: string | number) => {
const a = delnumFormat(_a) + ''
const b = delnumFormat(_b) + ''
let back = 0
const max = Math.ceil(Math.max(a.length, b.length) / 15)
//分成多少段,从左边开始
for (let i = max; i > 0; i--) {
const num1 = getMidNum(a, a.length - i * 15, 15)
const num2 = getMidNum(b, b.length - i * 15, 15)
//15位数字相减
const cur = num1 - num2
if (cur < 0) {
back = -1
break
} else if (cur > 0) {
back = 1
break
}
}
return back
}