传入的类型判断
export function isNumber (val) {
var regPos = /^\d+(\.\d+)?$/
var regNeg =
/^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/
if (regPos.test(val) || regNeg.test(val)) {
return true
} else {
return false
}
}
浮点数位数处理
export function decFloat (f, digit = 2) {
if (isNumber(f)) {
const m = Math.pow(10, digit)
return parseInt(decMul(f, m, -1), 10) / m
} else {
return 0
}
}
加法
export function decAdd (num1, num2, digit = 2) {
if (isNumber(num1) && isNumber(num2)) {
const num1Digits = (num1.toString().split('.')[1] || '').length
const num2Digits = (num2.toString().split('.')[1] || '').length
const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits))
const calcValue = (decMul(num1, baseNum) + decMul(num2, baseNum)) / baseNum
if (digit === -1) {
return calcValue
} else {
return decFloat(calcValue, digit)
}
} else {
return 0
}
}
减法
export function decSub (num1 = 0, num2 = 0, digit = 2) {
if (isNumber(num1) && isNumber(num2)) {
const num1Digits = (num1.toString().split('.')[1] || '').length
const num2Digits = (num2.toString().split('.')[1] || '').length
const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits))
const calcValue = (decMul(num1, baseNum) - decMul(num2, baseNum)) / baseNum
if (digit === -1) {
return calcValue
} else {
return decFloat(calcValue, digit)
}
} else {
return 0
}
}
乘法
export function decMul (num1 = 0, num2 = 0, digit = 2) {
if (isNumber(num1) && isNumber(num2)) {
const num1String = num1.toString()
const num2String = num2.toString()
const num1Digits = (num1String.split('.')[1] || '').length
const num2Digits = (num2String.split('.')[1] || '').length
const baseNum = Math.pow(10, num1Digits + num2Digits)
const calcValue =
(Number(num1String.replace('.', '')) *
Number(num2String.replace('.', ''))) /
baseNum
if (digit === -1) {
return calcValue
} else {
return decFloat(calcValue, digit)
}
} else {
return 0
}
}
除法
export function decDiv (num1 = 0, num2 = 0, digit = 2) {
if (isNumber(num1) && isNumber(num2)) {
const num1String = num1.toString()
const num2String = num2.toString()
const num1Digits = (num1String.split('.')[1] || '').length
const num2Digits = (num2String.split('.')[1] || '').length
const baseNum = Math.pow(10, num1Digits + num2Digits)
let n1 = decMul(num1, baseNum)
let n2 = decMul(num2, baseNum)
const calcValue = Number(n1) / Number(n2)
if (digit === -1) {
return calcValue
} else {
return decFloat(calcValue, digit)
}
} else {
return 0
}
}