JS ES6 加减乘除法小数浮点数计算BUG解决
2018年3月6日
JS ES6 加减乘除法小数浮点数计算BUG解决
//检测是否为数字 let num = (a) => { if(a != null && a.toString() != "") { let r = /^-?(0|[1-9]+\d*|[1-9]+\d*\.\d+|0\.\d+)$/; if(r.test(a.toString())) { return true; } } return false; } //加法 let plus = (a, b) => { if(!num(a) || !num(b)) { return null; } let c, d, m; try { c = a.toString().split(".")[1].length; } catch(e) { c = 0; } try { d = b.toString().split(".")[1].length; } catch(e) { d = 0; } m = Math.pow(10, Math.max(c, d)); return(a * m + b * m) / m; } //减法 let minus = (a, b) => { if(!num(a) || !num(b)) { return null; } let c, d, m, n; try { c = a.toString().split(".")[1].length; } catch(e) { c = 0; } try { d = b.toString().split(".")[1].length; } catch(e) { d = 0; } m = Math.pow(10, Math.max(c, d)); return(a * m - b * m) / m; // n = (c >= d) ? c : d; // return((a * m - b * m) / m).toFixed(n);//数字转换字符串,保留n位小数 } //乘法 let multiply = (a, b) => { let m = 0, c = a.toString(), d = b.toString(); try { m += c.split(".")[1].length } catch(e) {} try { m += d.split(".")[1].length } catch(e) {} return Number(c.replace(".", "")) * Number(d.replace(".", "")) / Math.pow(10, m) } //除法 let division = (a, b) => { if(!num(a) || !num(b)) { return null; } let c, d, f, g; try { c = a.toString().split(".")[1].length; } catch(e) { c = 0; } try { d = b.toString().split(".")[1].length; } catch(e) { d = 0; } with(Math) { f = Number(a.toString().replace(".", "")); g = Number(b.toString().replace(".", "")); return(f / g) * pow(10, d - c); } }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ES6 let命令和块级作用域和const命令
2018年3月7日 ES6 let命令和块级作用域和const命令 一、let命令1.ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。 { let a = 10; var b = 1; } console.log(b);//1 console.log(a);//Uncaught ReferenceError: a is not defined 上面代码let声明的变量只在它所在的代码块有效。 2.计数器i只在for循环体内有效,for循环设置循环变量的那部分是一个父作用域,循环体内部是一个单独的子作用域。 for (let i = 0; i < 10; i++) { //... } console.log(i);//Uncaught ReferenceError: i is not defined 上面代码中,计数器i只在for循环体内有效,在循环体外引用就会报错。 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console....
- 下一篇
一文理清Java内存区域
运行时数据区域 Java虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。根据《Java 虚拟机规范》将 Java虚拟机所管理的内存分为以下几个运行时数据区域: ●程序计数器 ●Java虚拟机栈 ●本地方法栈 ●Java堆 ●方法区 程序计数器 程序计数器 ,也称作 PC寄存器或者指令地址寄存器。在汇编语言中,它保存的是程序当前执行的指令的地址(或者说是保存一条),当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取指令,在得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。 在JVM中,程序计数器是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一跳需要执行的字节码指令。 由于Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时间,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能够恢复到正确的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16