最近做项目,发现用toFixed四舍五入会存在一定的问题,比如1.005保留两位小数是1.00,而我在excle试了下,是1.01,很显然excle的是符合我们实际情况的。至于原因上面的文章里面有说。
替代代码如下:在线地址
const a=1.005;
function toFixed(value,num){
let result
if(value){
if(Number.isInteger(value)){
result= value
}else{
const temp=value.toString()
if(temp.indexOf(".")>-1){
const arr=temp.split(".")
const inter=arr[0]
const dotStr=arr[1]
if(dotStr[num]==="5"){
result=Number((Number(inter)+Number(dotStr.substr(0,num))*Math.pow(0.1, num)+Math.pow(0.1, num)).toFixed(num))
}else{
result=Number(value.toFixed(num))
}
}
}
}
console.log(value,"保留",num,"位小数,",result.toFixed(num),'原函数',value.toFixed(num))
return result.toFixed(num)
}
toFixed(a,4)
toFixed(a,3)
toFixed(a,2)
toFixed(a,1)
toFixed(a,0)