toFixed四舍五入出现的问题

简介: toFixed四舍五入出现的问题

问题描述

toFixed是Javascript中常用来将number 四舍五入为指定小数位数的方法。

例如:

image.png

但是在实际运用中发现在四舍五入那一位为5时,出现了一点问题,例如下图中1.045进位出现的问题

image.png

toFeixd在进位时如果需要进位的末尾是5,如果5后不存在或是0则不进位,否则进位。

解决办法

如下,重写toFixed

exportfunctiontoFixedFun (data, len){
// debuggerconstnumber=Number(data);
if (isNaN(number) ||number>=Math.pow(10, 21)) {
returnnumber.toString();
  }
if (typeof (len) ==='undefined'||len===0) {
return (Math.round(number)).toString();
  }
letresult=number.toString();
constnumberArr=result.split('.');
if (numberArr.length<2) {
// 整数的情况returnpadNum(result);
  }
constintNum=numberArr[0]; // 整数部分constdeciNum=numberArr[1];// 小数部分constlastNum=deciNum.substr(len, 1);// 最后一个数字if (deciNum.length===len) {
// 需要截取的长度等于当前长度returnresult;
  }
if (deciNum.length<len) {
// 需要截取的长度大于当前长度 1.3.toFixed(2)returnpadNum(result);
  }
// 需要截取的长度小于当前长度,需要判断最后一位数字result=`${intNum}.${deciNum.substr(0, len)}`;
if (parseInt(lastNum, 10) >=5) {
// 最后一位数字大于5,要进位consttimes=Math.pow(10, len); // 需要放大的倍数letchangedInt=Number(result.replace('.', ''));// 截取后转为整数changedInt++; // 整数进位changedInt/=times;// 整数转为小数,注:有可能还是整数result=padNum(`${changedInt}`);
  }
returnresult;
// 对数字末尾加0functionpadNum(num) {
constdotPos=num.indexOf('.');
if (dotPos===-1) {
// 整数的情况num+='.';
for (leti=0; i<len; i++) {
num+='0';
      }
returnnum;
    } else {
// 小数的情况constneed=len- (num.length-dotPos-1);
for (letj=0; j<need; j++) {
num+='0';
      }
returnnum;
    }
  }
}
目录
相关文章
|
6月前
round() 函数:对一个数进行四舍五入
round() 函数:对一个数进行四舍五入
107 0
|
JavaScript 前端开发 算法
JavaScript中toFixed、Math.round和四舍五入、银行家舍入法之间的关系
JavaScript 的 toFixed 方法使用定点表示法来格式化一个数值,数字.toFixed(要保留几位小数),参数为小数点后数字的个数,介于 0 到 20(包括)之间,默认 0,返回值为使用定点表示法表示给定数字的字符串,该数值在必要时进行四舍五入,不足位数时会直接用 0 来填充小数部分
296 0
|
C++
C++ 多种取整函数的使用和区别: ceil() floor() round() trunc() rint() nearbyint()
C++ 多种取整函数的使用和区别: ceil() floor() round() trunc() rint() nearbyint()
247 0
真正的四舍五入
真正的四舍五入
|
算法 计算机视觉
每日一面 - sqrt (2)约等于 1.414,如何求sqrt (2)小数点后 10 位
每日一面 - sqrt (2)约等于 1.414,如何求sqrt (2)小数点后 10 位
|
JavaScript
JS中的小数四舍五入之(toFixed方法)
JS中的小数四舍五入之(toFixed方法)
107 0
JS中的小数四舍五入之(toFixed方法)
|
NoSQL BI MongoDB
从“四舍五入”到“奇进偶舍”
处理取整时,大概下意识的想到的方法,都是“四舍五入”吧?不过我们可以先看两个例子,在Python 3中,round(4.5) == 4,而在mongodb 以上的版本中,{$round: 4.5}的结果也是4。
1859 0