JS的四则运算

2024-05-03 08:58
文章标签 js 四则运算

本文主要是介绍JS的四则运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JS在计算小数的时候有时会出现精度问题,相信很多人有遇到过,今天特地总结一下。
## 问题 ##
0.1 + 0.2 = 0.30000000000000004
0.1 * 0.2 = 0.020000000000000004
......为什么会出现这样的情况呢?
浮点数值的最高进度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而Java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。待小数都换算为二进制后,再进行二进制间的运算,得到二进制结果。然后再将二进制结果换算为十进制,这里通常会出现第二次的误差。

解决方法:

/**	除法调用方式:var number = new Number();console.log(number.div(0.2, 0.10));
**/function acctDiv(arg1, arg2) {var r1 = Number(arg1.toString().replace(".", ""));var r2 = Number(arg2.toString().replace(".", ""));var l1 = 0;var l2 = 0;var l3 = 0;try {l1 =  Number(arg1.toString().split(".")[1].length);} catch (e) {l1 = 0;}try {l2 = Number(arg2.toString().split(".")[1].length);} catch (e) {l2 = 0;}var pow = Math.pow(10, Math.max(l1, l2));//先把结果放大一定倍数,再去移动相应位数var result = r1 / r2;console.log(result)try {l3 = Number(result.toString().split(".")[1].length);} catch (e) {l3 = 0;}var pow3 = Math.pow(10, l3);try {result = Number(result.toString().replace(".", ""));} catch (e) {}result = result * pow * Math.pow(10, l2 - l1) / (pow * pow3);console.log("result=" + result);return result;}/**乘法调用方式:var number = new Number();console.log(number.mul(0.0002, 0.02));**/function acctMul(arg1, arg2) {var r1 = Number(arg1.toString().replace(".", ""));var r2 = Number(arg2.toString().replace(".", ""));var m = 0;try {m += arg1.toString().split(".")[1].length;} catch (e) {m += 0;}try {m += arg2.toString().split(".")[1].length;} catch (e) {m += 0;}var result = (r1 * r2) / Math.pow(10, m);return result;}/**加法或减法调用方式:var number = new Number();console.log(number.addOrSub(0.1, 0.2));**/function acctAddOrSub(arg1, arg2) {var r1 = 0;var r2 = 0;var m = 0;try {r1 = arg1.toString().split(".")[1].length;} catch (e) {r1 = 0;}try {r2 = arg2.toString().split(".")[1].length;} catch (e) {r2 = 0;}m = Math.pow(10, Math.max(r1, r2));var result = (arg1 * m + arg2 * m) / m;return result;}/**除法运算**/Number.prototype.div = function(arg1, arg2) {return acctDiv(arg1, arg2);}/**乘法运算**/Number.prototype.mul = function(arg1, arg2) {return acctMul(arg1, arg2);}/**加减法运算**/Number.prototype.addOrSub = function(arg1, arg2) {return acctAddOrSub(arg1, arg2);}
上面的解放方法的原来基本都是通过把要计算的数放到到一定倍数进行运算后再转化回来,这个一定的倍数太小了也不行,我也是通过测试才得到上面比较合理的转换,当然也还有其他的解决方式,就是通过## toFixed() ## 函数去截取一定的精度,当然伴随着就是精度的缺失。
参考文档:http://www.cnblogs.com/zdz8207/p/js-number-tofixed.html

这篇关于JS的四则运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/956357

相关文章

js+css二级导航

效果 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能: 使用对象(或Map)来存储变量: 你可以使用一个对象来存储你的变量,然后使用字符串作为键来访问这些变量。 let myVars = { 'var1': 'Hello', 'var

图形编辑器基于Paper.js教程03:认识Paper.js中的所有类

先来认一下Paper的资源对象,小弟有哪些,有个整体的认识。认个脸。 在Paper.js的 官方文档中类大致有如下这些: 基类: ProjectViewItemPointToolSizeSegmentRectangleCurveCurveLocationMatrixColorStyleTweenToolEventGradientGradientStopEvent 二级或三级类 继承Ite

HTML文档插入JS代码的几种方法

在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间。 2.放置在由< script>标签的src属性指定的外部文件中。 3.放置在HTML事件处理程序中,该事件处理程序由onclick或onmouseover这样的HTML属性值指定。 4.放在一个URL里,这个URL使用特殊的“javascript:”协议。 在JS编程中,主张

js 正则表达式出现问题

帮同事写个页面,出现正则表达式不管怎么改都没法匹配的情况。。。。 reg = /^sy[0-9]+$/i; if(rtx.match(reg) == null){ alert("请输入正确的RTX账号!"); return false; } 因为之前一直用的是 reg ="/^sy[0-9]+$/i"; 写PHP写习惯了。。外面多写了两个双引号……T.T 改

bootstrap和JS相关

下表列出了模态框中要用到事件。这些事件可在函数中当钩子使用。 bootstrap 显示隐藏div $('.show-info').click(function () {var show = $(this).data('show');if(show =='all'){$('#creative').show();$('#plan').show();$('#plan').attr('class','

sublime配置node.js

1、下载Nodejs插件,下载地址为: https://github.com/tanepiper/SublimeText-Nodejs(见本人网盘) 下载zip压缩包后解压,文件名改为Nodejs 2、打开Sublime Text3,点击菜单“Perferences” =>“Browse Packages”打开“Packages”文件夹,并将第1部的Nodejs文件夹剪切进来 3

Lodash-js工具库

1. Lodash 简介 Lodash 是一个现代 实用工具库,提供了许多有用的函数,帮助开发者处理常见的编程任务,如数组操作、对象处理、字符串处理等。Lodash 使得代码更简洁、更高效,极大地提高了开发效率。Lodash 的设计灵感来自于 Underscore.js,但提供了更多的功能和更好的性能。 2. 安装 Lodash Lodash 可以通过多种方式安装: 具体安装:参考官网

js实现继承的多种方式

1:原型链方式,即子类通过prototype将所有在父类中通过prototype追加的属性和方法都追加到Child,从而实现了继承   function Person(){   }   Person.prototype.hello = "hello";   Person.prototype.sayHello = function(){     alert(this.h

js预加载/延迟加载

js预加载/延迟加载  博客分类:  · javascript 浏览器面试Chrome腾讯jQuery  在面试中问道了问题,虽然也看过相关资料,但是还是需要增强和梳理下,这些方式出现的需求和实现上的区别。  Pre loader 预加载一般有两种常用方式:xhr和动态插入节点的方式。动态插入节点是最为简单也最为广泛的一种异步加载方式,然后使用动态插入节点方法加载的文件都会在加载后立即执