当前位置: 首页 > news >正文

解决JavaScript 数学运算精度丢失的问题

JavaScript 中执行浮点数运算时可能会遇到精度丢失的问题。这通常是因为浮点数的表示遵循IEEE 754标准,而这种表示法只能精确地表示有限的数字。对于大多数程序员来说,这不是一个问题,因为它允许计算机处理超出精度范围之外的数字。然而,如果需要高精度的计算结果,例如货币计算,就需要采取措施避免精度丢失。

解决两个数相加精度丢失问题
function floatAdd(a, b) {var c, d, e;if(undefined==a||null==a||""==a||isNaN(a)){a=0;}if(undefined==b||null==b||""==b||isNaN(b)){b=0;}try {c = a.toString().split(".")[1].length;} catch (f) {c = 0;}try {d = b.toString().split(".")[1].length;} catch (f) {d = 0;}e = Math.pow(10, Math.max(c, d));return  (floatMul(a, e) + floatMul(b, e)) / e;
}
解决两个数相减精度丢失问题
function floatSub(a, b) {var c, d, e;if(undefined==a||null==a||""==a||isNaN(a)){a=0;}if(undefined==b||null==b||""==b||isNaN(b)){b=0;}try {c = a.toString().split(".")[1].length;} catch (f) {c = 0;}try {d = b.toString().split(".")[1].length;} catch (f) {d = 0;}e = Math.pow(10, Math.max(c, d));return (floatMul(a, e) - floatMul(b, e)) / e;
}
解决两个数相乘精度丢失问题
function floatMul(a, b) {var c = 0,d = a.toString(),e = b.toString();try {c += d.split(".")[1].length;} catch (f) {}try {c += e.split(".")[1].length;} catch (f) {}return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
解决两个数相除精度丢失问题
function floatDiv(a, b) {var c, d, e = 0,f = 0;try {e = a.toString().split(".")[1].length;} catch (g) {}try {f = b.toString().split(".")[1].length;} catch (g) {}return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), floatMul(c / d, Math.pow(10, f - e));
}
http://www.lryc.cn/news/456450.html

相关文章:

  • mysql学习教程,从入门到精通,SQL窗口函数(38)
  • gbase8s数据库实现黑白名单的几种方案
  • Qt-窗口布局按钮输入类
  • Apache DolphinScheduler社区9月进展记录
  • 在docker中安装并运行mysql8.0.31
  • C++ | Leetcode C++题解之第458题可怜的小猪
  • 【万字长文】Word2Vec计算详解(三)分层Softmax与负采样
  • 【分布式微服务云原生】探索Dubbo:接口定义语言的多样性与选择
  • SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]
  • DNS能加速游戏吗?
  • Raspberry Pi3B+之C/C++开发环境搭建
  • [笔记] 仿射变换性质的代数证明
  • 遥感影像-语义分割数据集:sar水体数据集详细介绍及训练样本处理流程
  • 极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8
  • 汽车管理系统中使用函数
  • 大数据分析入门概述
  • 提示工程、微调和 RAG
  • 自动化测试中如何高效进行元素定位!
  • UE5数字人制作平台使用及3D模型生成
  • Linux进程被占用如何杀死进程
  • 详解Xilinx JESD204B PHY层端口信号含义及动态切换线速率(JESD204B五)
  • Java面试——场景题
  • xss-labs靶场第一关测试报告
  • 微软PowerBI认证!数据分析师入门级证书备考攻略来啦
  • 上海AI Lab视频生成大模型书生.筑梦环境搭建推理测试
  • 3D看车如何实现?有哪些功能特点和优势?
  • Pytorch中不会自动传播梯度的操作有哪些?
  • 【设计模式】软件设计原则——开闭原则里氏替换单一职责
  • 项目完整开发的流程
  • 性能测试学习6:jmeter安装与基本配置/元件/线程组介绍