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日

相关文章

  • WebRTC媒体权限申请getUserMedia实例详解

    WebRTC媒体权限申请getUserMedia实例详解 WebRTC 是一个支持浏览器进行实时语音和视频通信的技术,该技术支持在浏览器中进行点对点的实时通信,如音视频聊天、语音识别等。其中要求涉及到媒体流的获取、媒体流的处理和媒体流的展示,其中媒体权限申请可以使用 getUserMedia 接口实现。 什么是 getUserMedia 接口? getUse…

    JavaScript 2023年6月11日
    00
  • javascript下用ActiveXObject控件替换word书签,将内容导出到word后打印第2/2页

    需要注意的是,JavaScript使用ActiveXObject控件需要在IE浏览器环境下操作,而且需要注意安全性问题。 创建Word对象 使用ActiveXObject控件来操作Word,首先需要创建一个Word对象。可以通过以下代码来实现: var wordApp = new ActiveXObject("Word.Application&qu…

    JavaScript 2023年6月11日
    00
  • JS验证input输入框(字母,数字,符号,中文)

    这里给出JS验证输入框的完整攻略。我们需要以下步骤来完成验证: 获取输入框元素 给输入框元素绑定事件监听器,以便在输入内容时能够及时验证 在事件监听器的回调函数中,通过正则表达式对输入内容进行验证 根据验证结果,决定是否将输入内容存储到变量或者进行其他操作 下面我们详细分析每个步骤,以及提供两个示例。 步骤1:获取输入框元素 我们可以使用 document.…

    JavaScript 2023年6月10日
    00
  • JavaScript实现cookie的写入、读取、删除功能

    当一个web页面被加载到浏览器中时,浏览器会为它分配一个cookie的存储区域。此时,开发者可以通过JavaScript代码来操作cookie的写入、读取和删除等功能。 写入cookie 可以使用document.cookie来写入cookie。document.cookie是一个字符串,它存储着当前网页的所有cookie。写入cookie的格式如下: do…

    JavaScript 2023年6月11日
    00
  • Java老手该当心的13个错误

    Java老手该当心的13个错误攻略 Java老手,往往会认为自己已经掌握了Java的特性和语法规则,然而在实际开发过程中,还是容易犯一些错误。本文将列举Java老手容易犯的13个错误,并给出具体的解决方案。 错误1:变量作用域 变量的作用域需要慎重考虑,特别是在使用匿名内部类时,很容易犯下这个错误。在使用匿名内部类时,一定要注意它对当前环境中变量的引用。示例…

    JavaScript 2023年5月28日
    00
  • 替代window.event.srcElement效果的可兼容性的函数

    替代window.event.srcElement的可兼容性函数,可以使用event.target属性来获取触发事件的元素。但是需要注意的是,此方法在IE8及以下版本不兼容,需要做兼容处理。 下面是完整的攻略,包含两条示例说明: 1. 使用event.target属性获取元素 使用event.target属性可获取触发事件的元素,示例如下: function…

    JavaScript 2023年6月10日
    00
  • AS3 js正则表达式 反向引用(backreference)

    AS3是指Adobe Flash平台的ActionScript语言版本3,而JS则是指JavaScript语言。在这两者中,都可以使用正则表达式(Regular Expression)来匹配和处理字符串。反向引用(Backreference)是正则表达式中的元字符之一,其可以用于匹配已经匹配过的子模式。 反向引用的语法为“\数字”,其中“数字”表示前面已经定…

    JavaScript 2023年6月10日
    00
  • JavaScript进阶教程(第三课)第2/2页

    关于JavaScript进阶教程(第三课)第2/2页的完整攻略,我来给你一个详细的说明。 JavaScript进阶教程(第三课)第2/2页攻略 概述 这篇文章主要介绍了JavaScript中的一些高级概念和技巧,包括函数柯里化、惰性函数、递归等等。针对每一种技巧,都有详细的说明和示例,帮助读者更好地理解和掌握这些概念和技巧。 函数柯里化 函数柯里化是一种将多…

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