前端JS: XEUtils.add(a,b)计算 会丢精度
解决方案:
1.XEUtils.add计算后, 增加精度处理
- XEUtils.round(Number,小数位数)
- parseFloat(Number).toFixed(小数位数)
2. 可使用以下js进行±*/计算
export function $Add (num1, num2) {
let maxLength, num1Length, num2Length
if (isNaN(Number(num1)) || isNaN(Number(num2))) {
return 0
}
try {
num1Length = num1.toString().split('.')[1].length
} catch (e) {
num1Length = 0
}
try {
num2Length = num2.toString().split('.')[1].length
} catch (e) {
num2Length = 0
}
maxLength = Math.pow(10, Math.max(num1Length, num2Length))
let num11 = num1.toString().split('.').join('') + (new Array(num1Length > num2Length ? 0 : num2Length - num1Length).fill('0').join(''))
let num22 = num2.toString().split('.').join('') + (new Array(num2Length > num1Length ? 0 : num1Length - num2Length).fill('0').join(''))
return (Number(num11) + Number(num22)) / maxLength
}
export function $Sub (num1, num2) {
if (isNaN(Number(num1)) || isNaN(Number(num2))) {
return 0
}
return $Add(num1, -Number(num2))
}
export function $Mul (num1, num2, precious = null) {
let maxLength, num1Length, num2Length
if (isNaN(Number(num1)) || isNaN(Number(num2))) {
return 0
}
try {
num1Length = num1.toString().split('.')[1].length
} catch (e) {
num1Length = 0
}
try {
num2Length = num2.toString().split('.')[1].length
} catch (e) {
num2Length = 0
}
maxLength = num1Length + num2Length
if (precious !== null && precious !== undefined && (!isNaN(parseInt(precious)))) {
return Number(Number(num1.toString().replace('.', '')) * Number(num2.toString().replace('.', '')) / Math.pow(10, maxLength)).toFixed(parseInt(precious))
} else {
return Number(num1.toString().replace('.', '')) * Number(num2.toString().replace('.', '')) / Math.pow(10, maxLength)
}
}
export function $Div (num1, num2, precious = null) {
let maxLength, num1Length, num2Length
if (isNaN(Number(num1)) || isNaN(Number(num2))) {
return 0
}
try {
num1Length = num1.toString().split('.')[1].length
} catch (e) {
num1Length = 0
}
try {
num2Length = num2.toString().split('.')[1].length
} catch (e) {
num2Length = 0
}
maxLength = num1Length - num2Length
if (precious !== null && precious !== undefined && (!isNaN(parseInt(precious)))) {
return Number(Number(num1.toString().replace('.', '')) / Number(num2.toString().replace('.', '')) * Math.pow(10, maxLength)).toFixed(parseInt(precious))
} else {
return Number(num1.toString().replace('.', '')) / Number(num2.toString().replace('.', '')) * Math.pow(10, maxLength)
}
}