兼容ie6计算精度方法
通过调用方法进行计算,就能解决这些问题
先按照最大的小数位乘以10的小数位次方得到整数,进行计算,最后再除以10的负小数位恢复
/**
* 浮点数新增 保证不会出现精度问题
* @param {Array} arr 要相加的数字列表
* @return {number}
*/
function floatAdd(arr) {
var sum = 0
var maxDecimalPlace = 0
var m
for (var i = 0
var decimalPlace
try {
decimalPlace = arr[i].toString().split('.')[1].length
} catch (e) {
decimalPlace = 0
}
if (decimalPlace > maxDecimalPlace) {
maxDecimalPlace = decimalPlace
}
}
m = Math.pow(10, maxDecimalPlace)
for (var i = 0
sum += arr[i] * m
}
return sum / m
}
/**
* 浮点数减法 保证不会出现精度问题
* @param {Array} arr 要相减的数字列表
* @return {number}
*/
function floatSubtract (arr) {
var maxDecimalPlace = 0
var m
for (var i = 0
var decimalPlace
try {
decimalPlace = arr[i].toString().split('.')[1].length
} catch (e) {
decimalPlace = 0
}
if (decimalPlace > maxDecimalPlace) {
maxDecimalPlace = decimalPlace
}
}
m = Math.pow(10, maxDecimalPlace)
var result = arr[0] * m
for (var i = 1
result -= arr[i] * m
}
return result / m
}
/**
* 浮点数乘法 保证不会出现精度问题
* @param {Array} arr 要相减的数字列表
* @return {number}
*/
function multiplyArray(arr) {
var factor = 1
var maxDecimals = 0
// 找出最大的小数位数
for (var i = 0
var strNum = arr[i].toString()
var decimalIndex = strNum.indexOf('.')
if (decimalIndex!== -1) {
var decimals = strNum.length - decimalIndex - 1
if (decimals > maxDecimals) {
maxDecimals = decimals
}
}
}
factor = Math.pow(10, maxDecimals)
var integerArray = []
for (var i = 0
integerArray.push(Math.round(arr[i] * factor))
}
var product = 1
for (var i = 0
product *= integerArray[i]
}
return product / Math.pow(factor, arr.length)
}