JS 重写toFixed方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS 重写toFixed方法相关的知识,希望对你有一定的参考价值。

参考技术A // 重写toFixed方法

Number.prototype.toFixed = function (n)

  if (n > 20 || n < 0)

      throw new RangeError('toFixed() digits argument must be between 0 and 20');

 

  const number = this;

  if (isNaN(number) || number >= Math.pow(10, 21))

      return number.toString();

 

  if (typeof (n) == 'undefined' || n == 0)

      return (Math.round(number)).toString();

 

  let result = number.toString();

  const arr = result.split('.');

  // 整数的情况

  if (arr.length < 2)

      result += '.';

      for (let i = 0; i < n; i += 1)

          result += '0';

     

      return result;

 

  const integer = arr[0];

  const decimal = arr[1];

  if (decimal.length == n)

      return result;

 

  if (decimal.length < n)

      for (let i = 0; i < n - decimal.length; i += 1)

          result += '0';

     

      return result;

 

  result = integer + '.' + decimal.substr(0, n);

  const last = decimal.substr(n, 1);

  // 四舍五入,转换为整数再处理,避免浮点数精度的损失  正数+1 负数-1

  if (parseInt(last, 10) >= 5)

      const x = Math.pow(10, n);

      result = (Math.round((parseFloat(result) * x)) + (parseFloat(result) > 0 ? 1 : -1)) / x;

      result = result.toFixed(n);

 

  return result;

;

JS取整方法

1、toFixed方法

  定义:toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。

  例如:将数据Num保留2位小数,则表示为:toFixed(Num);但是其四舍五入的规则与数学中的规则不同,使用的是银行家舍入规则(四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一)。

2、round方法

  定义:round() 方法可把一个数字舍入为最接近的整数。

  例如:Math.round(x),则是将x取其最接近的整数。其取舍的方法使用的是四舍五入中的方法,符合数学中取舍的规则。

对于X进行保留两位小数的处理,则可以使用Math.round(X * 100) / 100.进行处理。

3、两方法联合

  若想四舍五入后强制保存两位小数,即12-12.00,则两种方法联合使用(Math.round(X * 100) / 100).tofixed(2);

4、Js题目

一、(1.115).toFixed(2)
var a = 1.115;
console.log(a.toFixed(2))
//1.11 
//五考虑,a为1.115,五后为零看后为0,不进位.

 tofix方法在部分情况下会不精确,建议使用round方法。

以上是关于JS 重写toFixed方法的主要内容,如果未能解决你的问题,请参考以下文章

js中Number.toFixed()方法的理解

JS toFixed 四舍六入五成双

JS处理数据四舍五入,tofixed与round的区别

JS处理数据四舍五入(tofixed与round的区别详解)

JS处理数据四舍五入(tofixed与round的区别详解)

toFixed内置四舍五入错误