加法
function addAccuracy(arg1, arg2) {
let r1, r2, m
try {
r1 = arg1.toString().split('.')[1].length
} catch (error) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (error) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m + arg2 * m) / m
}
减法
function subAccuracy(arg1, arg2) {
let r1, r2, m
try {
r1 = arg1.toString().split('.')[1].length
} catch (error) {
r1 = 0
}
try {
r2 = arg2.toString().split('.')[1].length
} catch (error) {
r2 = 0
}
m = Math.pow(10, Math.max(r1, r2))
return (arg1 * m - arg2 * m) / m
}
乘法
//小数相乘,小数点后个数相加
function mulAccuracy(arg1, arg2) {
let m = 0
let r1 = arg1.toString()
let r2 = arg2.toString()
try {
m += r1.split('.')[1].length // 小数相乘,小数点后个数相加
} catch (e) {}
try {
m += r2.split('.')[1].length
} catch (e) {}
return (
(Number(r1.replace('.', '')) * Number(r2.replace('.', ''))) /
Math.pow(10, m)
)
}
除法
/*
将除法转化成乘法
乘以小数点后个数差
*/
function divisionAccuracy(arg1, arg2) {
let m1 = 0
let m2 = 0
let n1 = 0
let n2 = 0
try {
m1 = arg1.toString().split('.')[1].length
} catch (error) {}
try {
m2 = arg2.toString().split('.')[1].length
} catch (error) {}
n1 = Number(arg1.toString().replace('.', ''))
n2 = Number(arg2.toString().replace('.', ''))
/*
必须要是 m2 - m1 原因: 因为我们需要将被除数的先变成整数在进行运算, 所以这里必须要是 m2 - m1
0.3 / 0.01 我们必须要将0.01 先变成1 此时 0.3变成了一个30
*/
return mulAccuracy(n1 / n2, Math.pow(10, m2 - m1))
}
导出
export { addAccuracy, subAccuracy, mulAccuracy, divisionAccuracy }