解决js小数加减法精确度问题

发布于:2023-03-02 17:25    阅读次数:280    作者:云码素材    分类:技术分享    关键词:js小数加减法精确度  

解决js小数加减法精确度问题,js浮点数计算时,出现多位小数的bug,下面是例子:


0.1+0.2 // 0.30000000000000004
0.3-0.2  // 0.09999999999999998


解决办法,封装两个通用方法,如下所示:


//自定义加法运算
function addNum(arg1, arg2) {
  var r1, r2, m, c;
  try {
    r1 = arg1.toString().split(".")[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  c = Math.abs(r1 - r2);
  m = Math.pow(10, Math.max(r1, r2));
  if (c > 0) {
    var cm = Math.pow(10, c);
    if (r1 > r2) {
      arg1 = Number(arg1.toString().replace(".", ""));
      arg2 = Number(arg2.toString().replace(".", "")) * cm;
    } else {
      arg1 = Number(arg1.toString().replace(".", "")) * cm;
      arg2 = Number(arg2.toString().replace(".", ""));
    }
  } else {
    arg1 = Number(arg1.toString().replace(".", ""));
    arg2 = Number(arg2.toString().replace(".", ""));
  }
  return (arg1 + arg2) / m;
};
alert(addNum(0.1, 0.2)); // 0.3
//自定义减法运算
function subtraction(arg1, arg2) {
  var r1, r2, m, c;
  try {
    r1 = arg1.toString().split(".")[1].length;
  } catch (e) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split(".")[1].length;
  } catch (e) {
    r2 = 0;
  }
  c = Math.abs(r1 - r2);
  m = Math.pow(10, Math.max(r1, r2));
  if (c > 0) {
    var cm = Math.pow(10, c);
    if (r1 > r2) {
      arg1 = Number(arg1.toString().replace(".", ""));
      arg2 = Number(arg2.toString().replace(".", "")) * cm;
    } else {
      arg1 = Number(arg1.toString().replace(".", "")) * cm;
      arg2 = Number(arg2.toString().replace(".", ""));
    }
  } else {
    arg1 = Number(arg1.toString().replace(".", ""));
    arg2 = Number(arg2.toString().replace(".", ""));
  }
  return (arg1 - arg2) / m;
};
alert(subtraction(0.8,0.6)); // 0.2


以上的两个方法,可以有效地解决js浮点数计算时,出现多位小数的bug。



入群分享

我要加群:资源共享的时代,不要再单打独斗!加小编微信号加入群:xnynews(备注:云码素材入群),qq群号:202498279,一起技术学习,资源分享!

免责声明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

原创声明:本站所有资源如果标明原创的为云码素材已测试或原创开发项目,可提供有偿技术服务,如标明为收集,为网络收集资源,网路收集资源不提供任何技术支持和服务,网络虚拟资源,一经售出,概不退货,请购买前认真看清资源详情说明。

推荐源码
查看更多

热门文章

1反向词典网站wantwords

2022-05-10 08:48   浏览:29940

2Tik Tok 深田咏美抖音视频100+合集资源免费下载【绿色】

2022-10-31 08:42   浏览:15863

3NB Map-自动生成三维地图工具网站

2022-03-27 09:29   浏览:14000

4河南高速公路实时路况监控查询入口分享

2022-09-11 15:02   浏览:12068

5微信视频号封面的宽和高是多少 及录制视频的分辨率是多大

2020-04-13 15:31   浏览:10865

6免费使用chatgpt3种方式 chatgpt国内入口无需梯子

2023-04-23 17:52   浏览:9095

7三个开源的php论坛bbs源码 可自建 圈子 帖子社区网站!

2020-09-15 21:34   浏览:8073

8thinkphp6如何引入extend第三方类库

2019-08-28 17:28   浏览:8021

9可爱的在线捏猫小游戏网站-NieMao

2022-09-08 10:28   浏览:7898

10phpstorm2019.2版本2020年最新激活方法

2020-02-03 15:16   浏览:6656

下午时段云码素材正在优化细节,力求做一个人见人爱的“细节控”哦~

免费领
签到客服赚钱 反馈 回顶部
× Your Image

每天一个精品源码资源

汽车贴膜改色小程序源码 汽车配色小程序源码 车身改色app源码 带后台 带数据