`

js 加减乘除精度问题

    博客分类:
  • js
阅读更多

一。加法精度修改后如下:

function add(...val) {
      let max = 0
      let count = 0
      for (let i = 0; i < val.length; i++) {
        const strVal = val[i].toString()
        const index = strVal.indexOf('.')
        let num = 0
        if (index > -1) {
          num = strVal.length - 1 - index
          max = num > max ? num : max
        }
      }
      for (let i = 0; i < val.length; i++) {
        count += Math.round(val[i] * Math.pow(10, max))
      }
      return count / Math.pow(10, max)
    }

 使用:add(0.1, 0.2, 0.3, 0.4) => 1。可以传多个参数进行相加。

 

二。减法精度修改后如下:

function sub(...val) {
      let max = 0
      let count = val[0] | 0
      for (let i = 0; i < val.length; i++) {
        const strVal = val[i].toString()
        const index = strVal.indexOf('.')
        let num = 0
        if (index > -1) {
          num = strVal.length - 1 - index
          max = num > max ? num : max
        }
      }
      for (let i = 0; i < val.length; i++) {
        count -= Math.round(val[i] * Math.pow(10, max))
      }
      return count / Math.pow(10, max)
    }

 使用:sub(1, 0.2, 0.3, 0.4) => 0.1。相当于1 - 0.2 -0.3 -0.4;可以传多个参数,使用首位减后面的所有参数。

 

三。乘法精度修改后如下:

function ride(...val) {
      const strVal = val[0].toString()
      const strValTwo = val[1].toString()
      const index = strVal.indexOf('.')
      const indexTwo = strValTwo.indexOf('.')
      const num = [0, 0]
      if (index > -1) {
        num[0] = strVal.length - 1 - index
      }
      if (indexTwo > -1) {
        num[1] = strValTwo.length - 1 - index
      }
      return Math.round((val[0] * Math.pow(10, num[0])) * (val[1] * Math.pow(10, num[1]))) / Math.pow(10, num[0] + num[1])
    }

 使用:ride(0.5, 0.6) => 3, 只允许传入两个参数。%计算可以这样ride(0.5, 100) => 50。

function percentage(val) {
      const strVal = val.toString()
      const index = strVal.indexOf('.')
      let num = 0
      if (index > -1) {
        num = strVal.length - 1 - index
      }
      if (num > 2) {
        return Math.round(val * Math.pow(10, num)) / Math.pow(10, num - 2)
      } else {
        return Math.round(val * 100)
      }
    }

 上面这个是专门用于计算%数的。percentage(0.05) => 5

 

四。除法精度修改后如下:

function exc(val, valTwo = 100) {
      const strVal = val.toString()
      const strValTwo = valTwo.toString()
      const index = strVal.indexOf('.')
      const indexTwo = strValTwo.indexOf('.')
      const num = [0, 0]
      if (index > -1) {
        num[0] = strVal.length - 1 - index
      }
      if (indexTwo > -1) {
        num[1] = strValTwo.length - 1 - index
      }
      return Math.round(val * Math.pow(10, num[0])) / (Math.round((valTwo * Math.pow(10, num[1]))) * Math.pow(10, num[0] - num[1]))
    }

 使用:exc(0.5, 0.2) => 2.5, 只允许传入两个参数。如果计算出现无穷数请后期根据需要修改最后代码进行取舍。

 

建议:所有的计算最后都由后端处理好,再传到前端,这样可以避免精度问题。

分享到:
评论

相关推荐

    js加减乘除丢失精度问题解决方法

    在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会...

    js加减乘除计算器代码.zip

    在JavaScript编程语言中,...通过这个js加减乘除计算器代码,你可以学习到JavaScript基础、DOM操作、事件处理以及简单的算法设计。这是一个很好的实践项目,可以帮助初学者提升编程技能,同时理解前端开发的基本流程。

    js 加减乘除

    ### JavaScript中的精确加减乘除实现 在JavaScript中进行数值计算时,经常会出现不精确的情况,尤其是涉及到小数运算时更为明显。这是因为JavaScript中的数字是以IEEE 754双精度浮点数(64位)格式存储的,这种格式...

    javascript解决小数的加减乘除精度丢失的方案

    在JavaScript开发中,处理小数加减乘除运算时经常会遇到精度丢失的问题。由于JavaScript中的数字是以IEEE 754标准的双精度64位浮点数来表示的,这就意味着它可以精确地表示的整数范围大约在-***到***之间。当超出这...

    解决JS浮点数(小数)计算加减乘除的BUG

    2. **使用库**:有些库如`decimal.js`或`big.js`专门用于处理高精度浮点数计算,它们可以避免JavaScript内置的浮点数精度问题。 3. **整数运算**:对于涉及金钱计算等需要精确结果的场景,可以考虑将数值转换为整数...

    JS小数加减乘除运算后位数增加的解决方案

    JS小数加减乘除运算后小数点后产生多位数和计算精度损失的解决方案

    MathTask_单元测试_加减乘除运算_

    "MathTask_单元测试_加减乘除运算_"这个标题暗示我们正在处理一个与数学运算相关的项目,特别是涉及基本的加法、减法、乘法和除法。这个项目可能是一个计算器应用、一个数学库或者任何其他需要进行数值计算的软件...

    JS精准加减乘除算法

    JS精准加减乘除算法,解决JS原生加减乘除运算精度不足问题。

    javascript解决小数的加减乘除精度丢失的方案.docx

    ### JavaScript 解决小数加减乘除精度丢失的方案 #### 一、引言 在JavaScript中处理小数运算时,经常会遇到一个令人头疼的问题——精度丢失。这主要是因为JavaScript中的数字采用IEEE 754标准下的双精度64位浮点数...

    详解js加减乘除精确计算

    JavaScript中的加减乘除运算在处理浮点数时可能会出现精度丢失的问题,这是由于计算机内部存储和计算浮点数的方式导致的。浮点数在计算机内存中是以二进制表示的,某些十进制小数转换成二进制时无法精确表示,从而...

    计算器--简单的加减乘除

    本文将详述“计算器--简单的加减乘除”这一主题,着重解析如何解决数据精度问题,以及在加减乘除操作中保持计算精确性的方法。 首先,我们需要理解计算机在处理数字时可能面临的精度问题。在大多数编程语言中,如...

    javascript加减乘除的简单实例.docx

    此外,为了方便使用,文档还扩展了 `String` 类型,添加了 `div` 和 `mul` 方法,使得可以直接对字符串形式的数字调用这些自定义的加减乘除操作,比如 `var result = "12.34".div("5.67")`。 总结来说,这个实例...

    js Math.js bigNumber可以解决js运算精度丢失问题

    使用示例: math.config({ number:'BigNumber' }) let result=math.parser().eval(a+ "-" + b); //a,b是需要计算的值,中间是运算符

    javascrpt的加减乘除运算

    ### JavaScript中的精确加减乘除运算 在JavaScript中进行数学计算时,经常会出现精度丢失的问题,尤其是在处理小数运算时尤为明显。这是因为JavaScript中的数字是以双精度浮点数(64位)形式存储的,遵循IEEE 754...

    javascript加减乘除的简洁实例_.docx

    在JavaScript中,进行基本的数学运算如加、减、乘、除是相当直观的,但当我们处理浮点数时,可能会遇到精度问题。这个文档提供了一些简洁的实例,通过自定义函数来解决浮点数计算时可能出现的精度丢失问题。 首先,...

    JS精度问题

    JS精度问题,解决了JS加减乘除时候精度错误问题,就是后面带有很多0的问题

    js代码-200601-不用加减乘除做加法

    标题和描述所提到的"js代码-200601-不用加减乘除做加法"就是这样一个例子,它探讨了如何在JS中实现加法运算而不直接使用加法运算符。 在JavaScript中,加法运算符"+"除了用于数字的加法之外,还有一个特殊功能,即...

    javascript加减乘除的简单实例

    总结一下,JavaScript中的加减乘除运算可能由于浮点数的表示方式而存在精度问题。为了克服这个问题,可以编写自定义函数,如`accDiv`、`accMul`、`accAdd`和`accSubtr`,它们通过计算小数位数并使用`Math.pow()`来...

Global site tag (gtag.js) - Google Analytics