function round(num, iCount) {
// iCount 保留几位小数
let changeNum = num
let zs = true
// 判断是否是负数
if (changeNum < 0) {
changeNum = Math.abs(changeNum)
zs = false
}
const iB = Math.pow(10, iCount)
// 有时乘100结果也不精确
const value1 = changeNum * iB
let intDecSet = []
let intDecHun = []
let fValue = value1
const value2 = value1.toString()
const iDot = value2.indexOf('.')
// 如果是小数
if (iDot !== -1) {
intDecSet = changeNum.toString().split('.')
// 如果是科学计数法结果
if (intDecSet[1].indexOf('e') !== -1) {
return Math.round(value1) / iB
}
intDecHun = value2.split('.')
if (intDecSet[1].length <= iCount) {
return parseFloat(num, 10)
}
const fValue3 = parseInt(intDecSet[1].substring(iCount, iCount + 1), 10)
if (fValue3 >= 5) {
fValue = parseInt(intDecHun[0], 10) + 1
} else {
// 对于传入的形如111.834999999998 的处理(传入的计算结果就是错误的,应为111.835)
if (fValue3 === 4 && intDecSet[1].length > 10 && parseInt(intDecSet[1].substring(iCount + 1, iCount + 2), 10) === 9) {
fValue = parseInt(intDecHun[0], 10) + 1
} else {
fValue = parseInt(intDecHun[0], 10)
}
}
}
// 如果是负数就用0减四舍五入的绝对值
let val = zs ? (fValue / iB) : (0 - fValue / iB)
const d = val.toString().split('.')
if (d.length === 1) {
return val.toString() + '.00'
}
if (d.length > 1) {
if (d[1].length < 2) {
val = val.toString() + '0'
}
return val
}
}
标签:10,val,intDecSet,changeNum,小数点,js,正负数,let,fValue
From: https://www.cnblogs.com/axingya/p/18071175