js 中将 string 转化为 double,避免产生多位数和计算精度损失。

本贴最后更新于 2637 天前,其中的信息可能已经东海扬尘

js 中将 string 转化为 double,避免产生多位数和计算精度损失。

、当小数点后面的个数相同时:

num1=1.23

num2=24.21

计算得:

num1+num2=1.2324.21 -----这结果表明是,字符串直接拼接

num11+num21=25.44 ----结果可见,num1*1 是直接将它转变成我们想要的结果了

2、当小数点后面的个数不同时:(注意当我们的 string 后面有空格,每一个空格都视为一位小数)

num1=12.1;

num2=0.21;

计算得:

num11+num21=12.219999999999999 这种情况我们就不能怎么做了

改为:

(num1100+num2100)/100=12.22

3、当我们无法判读小数点的位数时(注意:带入的参数 num1 和 num2 最好是去掉尾部的空)

加法运算**
**

[javascript] view plain copy

  1. function numAdd(num1, num2) {
  2. var baseNum, baseNum1, baseNum2;
  3. try {
  4. baseNum1 = num1.toString().split(".")[1].length;
  5. } catch (e) {
  6. baseNum1 = 0;
  7. }
  8. try {
  9. baseNum2 = num2.toString().split(".")[1].length;
  10. } catch (e) {
  11. baseNum2 = 0;
  12. }
  13. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  14. var precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;//精度
  15. return ((num1 * baseNum + num2 * baseNum) / baseNum).toFixed(precision);;
  16. };

减法运算

[javascript] view plain copy

  1. function numSub(num1, num2) {
  2. var baseNum, baseNum1, baseNum2;
  3. try {
  4. baseNum1 = num1.toString().split(".")[1].length;
  5. } catch (e) {
  6. baseNum1 = 0;
  7. }
  8. try {
  9. baseNum2 = num2.toString().split(".")[1].length;
  10. } catch (e) {
  11. baseNum2 = 0;
  12. }
  13. baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
  14. var precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
  15. return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
  16. };
  17. // 乘法运算
  18. "code" class="javascript">function numMulti(num1, num2) {
  19. var baseNum = 0;
  20. try {
  21. baseNum += num1.toString().split(".")[1].length;
  22. } catch (e) {
  23. }
  24. try {
  25. baseNum += num2.toString().split(".")[1].length;
  26. } catch (e) {
  27. }
  28. return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
  29. };
  30. // 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
  31. function numDiv(num1, num2) {
  32. var baseNum1 = 0, baseNum2 = 0;
  33. var baseNum3, baseNum4;
  34. try {
  35. baseNum1 = num1.toString().split(".")[1].length;
  36. } catch (e) {
  37. baseNum1 = 0;
  38. }
  39. try {
  40. baseNum2 = num2.toString().split(".")[1].length;
  41. } catch (e) {
  42. baseNum2 = 0;
  43. }
  44. with (Math) {
  45. baseNum3 = Number(num1.toString().replace(".", ""));
  46. baseNum4 = Number(num2.toString().replace(".", ""));
  47. return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
  48. }
  49. };
  50. 转载自:http://w3capp.cn/download/details?id=63&focus=5&type=2
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 倾城之链
    23 引用 • 66 回帖 • 160 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖 • 1 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 2 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    79 引用 • 431 回帖
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 544 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖 • 1 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 393 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 687 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 67 回帖 • 445 关注
  • AWS
    11 引用 • 28 回帖 • 8 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 32 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 108 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 806 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 176 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    430 引用 • 1250 回帖 • 599 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 662 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 432 关注
  • CodeMirror
    1 引用 • 2 回帖 • 158 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 3 关注