javascript之对系统的toFixed()方法的修正

前言:

在 Javascript 中,toFixed() 方法可以将一个数字保留指定位数的小数。但是这个方法存在一个问题,对于某些数字在小数部分保留时可能会出现精度错误。本文将介绍如何修正toFixed()方法在某些情况下出现的精度错误。

修正toFixed()方法的代码:

我们将修正后的代码命名为toFixedNew()方法。toFixedNew()方法可以解决toFixed()在某些情况下的精度问题。下面是代码实现:

Number.prototype.toFixedNew = function(n){
    const b = this.toLocaleString()
    const c = b.split('.')[1] || ''

     if (n == null || n == 0) {
        return parseInt(b);
     }

     return parseInt(this * Math.pow(10,n)) / Math.pow(10,n) + ( c.length > n ? `.${c.slice(0,n)}` : c ? `.${c}` : Array(n+1).join('0') )
}

代码实现的思路:

  • 首先,将数值转化为本地形式,包括小数点,千分位分隔符等;
  • 然后,将小数点后的数字字符进行处理得到小数部分;
  • 若保留小数位数为 null 或者为 0,则返回整数;
  • 否则,返回修正后的结果:将原数乘以10的n次方,取整后再除以10的n次方,最后将小数部分根据保留小数位数进行处理,同时考虑小数位数不够的情况。

示例说明:

下面分两个示例说明toFixedNew()方法的使用:

例1:将 0.1 和 0.2 相加后保留一位小数的结果

const a = 0.1, b = 0.2;
let c = (a + b).toFixedNew(1);
console.log(c); //0.3

上述代码输出结果正确。

例2:保留 2 位小数

const a = 0.615, b = 10.235, c = 0.125;
console.log(a.toFixedNew(2)); //0.62
console.log(b.toFixedNew(2)); //10.24
console.log(c.toFixedNew(2)); //0.13

上述代码输出结果可以看出,修正后的方法得出的保留指定位数的小数正确无误。

结束语:

通过自定义一个toFixedNew()方法可以避免toFixed()方法在某些情况下存在的精度问题。以上代码仅为一种修正方案,读者可以结合实际情况进行修改和使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript之对系统的toFixed()方法的修正 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • ES6数组的扩展详解

    ES6数组的扩展详解 在ES6中,数组的概念得到了进一步扩展和完善,提供了一些新的方法和语法糖,使得开发人员在对数组进行操作时具有更多的便利性。 扩展运算符 在ES6中,一个新的运算符…被引入,称为扩展运算符(spread operator)。扩展运算符可以将数组展开为一系列的参数,方便我们对多个参数进行操作。 示例1:合并数组 const arr1 =…

    JavaScript 2023年5月27日
    00
  • JavaScript定时器用法

    JavaScript定时器是一种用于在指定时间间隔后执行代码的功能。在Web应用程序中,它们经常用于将动画效果与其他用户交互部分结合起来。本攻略将详细介绍JavaScript定时器,包括setTimeout和setInterval函数的用法。 setTimeout setTimeout函数允许我们在指定的时间间隔之后执行一段代码。以下是setTimeout函…

    Web开发基础 2023年3月30日
    00
  • javascript去掉代码里面的注释

    下面是“JavaScript去掉代码里面的注释”的完整攻略: 步骤一:复制代码 首先,需要将所要去除注释的JavaScript代码复制到一个新的文本文件中。可以使用文本编辑器完成该步骤。 步骤二:使用正则表达式去除注释 在新的文本文件中,我们可以使用正则表达式(Regular Expression)去除代码里面的注释。以下是基于正则表达式的两个示例: 示例一…

    JavaScript 2023年6月11日
    00
  • ECMAScript中函数function类型

    ECMAScript中函数(Function)类型是一种特殊的对象,函数作为对象拥有一些特殊的属性和方法,比如call、apply、length、prototype等。 定义函数 定义函数有两种常见的方式: 函数声明 函数声明使用function关键字,后跟函数名和一对圆括号。函数体被包含在一对花括号内。例如: function sum(num1, num2…

    JavaScript 2023年5月27日
    00
  • 给js文件传参数(详解)

    下面是一份详细的“给js文件传参数(详解)”攻略。 什么是给JS文件传参数? 在网页开发中,经常需要使用 JavaScript 来完成各种交互效果和页面逻辑。而在这些 JavaScript 文件中,有时需要引用一些外部数据,比如页面的标题、用户输入的某些值等。这时候就需要通过给 JS 文件传递参数来实现。 通俗地说,就是将一些数据从网页传递给 JS 文件,让…

    JavaScript 2023年5月27日
    00
  • 基于JavaScript实现淘宝商品广告效果

    让我来详细讲解一下”基于JavaScript实现淘宝商品广告效果”的完整攻略。 1. 简介 该攻略介绍了如何使用JavaScript实现淘宝商品广告效果,这种效果通常使用在商品推广页和商城首页等页面进行商品推广。在本攻略中,我们将使用一些JavaScript技术,例如jQuery库和CSS3动画技术,来实现淘宝商品广告效果。 2. 步骤 以下是实现淘宝商品广…

    JavaScript 2023年6月11日
    00
  • Three.js中网格对象MESH的属性与方法详解

    当使用Three.js创建基于WebGL的3D图形时,网格对象Mesh是最常用的3D对象之一。在这篇攻略中,我们将详细讲解Mesh对象的属性与方法,帮助您更好地使用Three.js创建出令人惊叹的3D交互页面。 Mesh的基本构造函数 Mesh对象是由几何体Geometry和材质Material组成的。创建Mesh对象的基本构造函数如下所示: Mesh(ge…

    JavaScript 2023年6月10日
    00
  • js实现字符串转日期格式的方法

    下面是实现字符串转日期格式的方法的完整攻略: 步骤一:创建日期对象 字符串转日期格式,我们需要先将字符串转为日期对象,再对日期对象进行格式化操作。我们可以通过Date对象来创建日期对象。 let dateStr = ‘2021-12-31’; let dateObj = new Date(dateStr); console.log(dateObj); 上面的…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部