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日

相关文章

  • javascript实现的白板效果(可以直接在网页上写字)

    以下是“JavaScript实现的白板效果”的完整攻略。 什么是JavaScript实现的白板效果 JavaScript实现的白板效果指的是一种可以在网页上直接进行绘图、写字的技术。用户可以使用鼠标或者触摸屏输入文字、画图,实现类似于白板的功能,便于在网页上进行各种标记和展示。 实现“JavaScript实现的白板效果”的步骤 实现“JavaScript实现…

    JavaScript 2023年6月11日
    00
  • 使用canvas生成含有微信头像的邀请海报没有微信头像问题

    使用Canvas生成含有微信头像的邀请海报是一项常见的需求,当中有时会遇到生成海报时,无法正确显示微信头像的问题。基于此,我编写了以下攻略来帮助您解决该问题。 常见问题分析 微信头像无法正确显示原因 微信头像无法正确显示,通常情况下是由于CORS的限制所导致的。在浏览器中,脚本的跨源HTTP请求通常会受到同源策略的限制,因此无法获取其他网站的数据。而我们在使…

    JavaScript 2023年6月11日
    00
  • Bootstrap table的使用方法

    以下是关于Bootstrap table的使用方法的完整攻略。 Bootstrap table是什么? Bootstrap table是一个基于Bootstrap开发的强大的表格插件,提供了丰富的功能和定制选项,使得开发人员可以快速创建高度定制化的表格。 如何引入Bootstrap table? 在使用Bootstrap table之前,我们需要先引入Boo…

    JavaScript 2023年6月11日
    00
  • 简介JavaScript中POSITIVE_INFINITY值的使用

    简介JavaScript中POSITIVE_INFINITY值的使用 在 JavaScript 中,POSITIVE_INFINITY是一个特殊的数值,表示正无穷大。它通常表示一个计算无限的结果或者是一个超过数值范围的值。在下面的内容中,我们将深入了解 POSITIVE_INFINITY 值的使用。 使用场景 除法中出现分母为零 当我们向一个数除以0时,将出…

    JavaScript 2023年5月28日
    00
  • 一文详解e2e测试之cypress的使用

    一文详解e2e测试之cypress的使用 什么是e2e测试? e2e测试指的是端到端测试,即从用户输入某些数据开始,到最终页面的数据展示,整个过程都进行测试。一般采用自动化测试的方式,可以在构建流程中嵌入,用于保证系统在不同环节的各项功能都能正常使用。 cypress是什么? cypress是一款现代化的端到端测试工具,由前端社区推出。它使用Javascri…

    JavaScript 2023年6月11日
    00
  • javascript实现最长公共子序列实例代码

    下面是关于“javascript实现最长公共子序列实例代码”的完整攻略。 完整任务说明 本任务要求实现一个javascript代码,用于寻找两个字符串的最长公共子序列。 功能要求 输入两个字符串,比如”abcdfg”和”abdfg”,程序需要输出它们的最长公共子序列。 实现的算法需要支持对长度为m和n的字符串进行快速计算,时间复杂度需要为 O(m*n)。 背…

    JavaScript 2023年5月28日
    00
  • JS中apply()的应用实例分析

    JS中apply()的应用实例分析 什么是apply()? JS中的apply()是Function对象自带的一个方法,它的作用是调用函数并将对象作为第一个参数进行传递,第二个参数是一个包含传递给函数的参数的数组。 语法:function.apply(thisArg, [argsArray]) thisArg:在函数中某个对象将被用作“this”对象。 ar…

    JavaScript 2023年5月28日
    00
  • JavaScript 原型继承

    JavaScript 原型继承 JavaScript 原型继承是一种非常重要的概念,相较于传统的面向对象语言中的继承,JavaScript 通过原型继承来实现对象之间的属性和方法的共享,它是 JavaScript 中最为灵活的一种继承方式。 定义 JavaScript 中的每个对象(除了 null)都有一个原型对象,原型对象可以通过 Object.getPr…

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