美文网首页
浮点数计算精度问题

浮点数计算精度问题

作者: maomizone | 来源:发表于2022-04-13 18:05 被阅读0次

产生的原因

计算机在进行运算时是将数值转为二进制后计算,我们可以通过num.toString(2)这个方法查看转为二进制的字符串,当数字是浮点数时,转换为二进制时可能是循环数,而计算机存储只保留64位,所以对于循环数来说必然要舍弃位数,出现精度的问题

  let a = 10
  console.log(a.toString(2)); // 1010
  a = 0.1 // 循环数
  console.log(a.toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
  a = 0.5
  console.log(a.toString(2)) // 0.1

解决方案

  • toFixed(length):保留length位数,四舍五入
  function add(num1, num2){
      return (num1 + num2).toFixed(2)
  }

  console.log(add(0.1, 0.2)); // 0.30000000000000004 -> 0.30
  • 扩大系数法,就是将浮点数都变成整数后计算,最后再除以系数
  function plus(num1, num2){
     // 先转换一下 '1'->1
      num1 = +num1
      num2 = +num2
      if(isNaN(num1) || isNaN(num2)){
          return NaN
      }

      let max = Math.max(getPow(num1), getPow(num2))

      return (num1*max + num2*max)/max

  }

  function getPow(num){
      // 解构赋值
      let [, char = ''] = (num + '').split('.')
      let len = char.length

      return Math.pow(10, len)
  }

  console.log(plus(0.1, 0.234)); // 0.334

相关文章

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • 浮点数计算精度问题

    产生的原因 计算机在进行运算时是将数值转为二进制后计算,我们可以通过num.toString(2)这个方法查看转为...

  • js浮点运算

    前言 在项目开发过程中发现浮点数的运算会出现精度问题,尤其是乘除运算。产生浮点数计算精度不准确的原因: 在计算机角...

  • Java浮点数计算精度问题总结

    Java浮点数计算精度问题总结 首先看看下面几个简单的加法计算的输出结果:System.out.println(0...

  • iOS 浮点数的精确计算和四舍五入问题

    iOS开发中,使用浮点数(float,double)类型运算需要注意计算精度的问题。即使只是两位小数,也会出现误差...

  • js 浮点数计算

    在做项目的时候,涉及到金额加减时,经常会出现计算精度的问题,常见例子如下: 在遇到浮点数运算后出现的精度问题时,起...

  • js 处理四则运算失去精度问题

    js 处理四则运算失去精度问题 计算精度,特别是浮点数计算。举个栗子 然后我寻求各种解决办法,其中用了lodash...

  • 避开JavaScript浮点数计算精度问题

    案例分析 最近在处理将小数转换成百分数的时候遇见一个问题,比如讲0.17换算成17%,用过滤器来实现: 然而显示的...

  • iOS开发浮点数计算精度问题

    1、浮点数运算带来的问题 在日常工作中涉及到浮点数(float、double)的运算 2、浮点数运算精度的解决方案...

  • JS浮点数计算精度

    JS的浮点数,计算都是会有问题的。下面给出加减乘除的解决办法 131.20*100 = 13119.999999 ...

网友评论

      本文标题:浮点数计算精度问题

      本文链接:https://www.haomeiwen.com/subject/wfvasrtx.html