专栏首页lonelydawn的前端猿区js高精度浮点数运算

js高精度浮点数运算

贴代码: 

// 自定义高精度浮点数运算
// 对象格式写法
var float_calculator={
	/**
	 * 1.记录两个运算数小数点后的位数
	 * 2.将其转化为整数类型进行运算
	 * 3.移动小数点的位置
	**/
	add:function(arg1,arg2){
		var r1,r2,m;
		try{
			//取小数位长度
			r1=arg1.toString().split(".")[1].length;
			r2=arg2.toString().split(".")[1].length;
		}catch(e){
			r1=0;r2=0;
		}
		m=Math.pow(10,Math.max(r1,r2));		//计算因子

		return (arg1*m+arg2*m)/m;
	},
	minus:function(arg1,arg2){
		return this.add(arg1,-arg2);
	},
	mul:function(arg1,arg2){
		var r1,r2,m; 
		try{
			//取小数位长度
			r1=arg1.toString().split(".")[1].length;
			r2=arg2.toString().split(".")[1].length;
		}catch(e){
			r1=0;r2=0;
		} 
		m=Math.pow(10,Math.max(r1,r2));		//计算因子

		return (arg1*m)*(arg2*m)/(m*m);
	},
	div:function(arg1,arg2){
		if( arg2 == 0 ) return 0;
		var t1=0,t2=0,r1,r2;
		try{
			t1=arg1.toString().split(".")[1].length;
			t2=arg2.toString().split(".")[1].length;
		}catch(e){}

		with(Math){ 
			r1=Number(arg1.toString().replace(".",""));
			r2=Number(arg2.toString().replace(".",""));
		}

		return (r1/r2)*Math.pow(10,t2-t1);
	}
};

测试:

alert("高精度加法计算结果: "+float_caculator.add(1.11444,23.45674231)+
	"\njs计算结果: "+(1.11444+23.45674231));
alert("高精度减法计算结果: "+float_caculator.minus(1.11444,23.45674231)+
	"\njs计算结果: "+(1.11444-23.45674231));
alert("高精度乘法计算结果: "+float_caculator.mul(1.11444,23.45674231)+
	"\njs计算结果: "+(1.11444*23.45674231));
alert("高精度除法计算结果: "+float_caculator.div(1.11444,23.45674231)+
	"\njs计算结果: "+(1.11444/23.45674231));

测试结果如下:

加法

减法

乘法

除法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一个数字截取引发的精度问题(二)

    上篇文章只是简单介绍了Number的 toFixed 方法,周末抽时间把 Number 里的一些方法又看了一下,其中有个方法引起我的注意: Number.pro...

    前端黑板报
  • Webix JavaScript UI 库可以帮你构建跨平台的HTML5 和 CSS3 程序

    XB 软件公司最近发布了JavaScript UI 库Webix ,其中包含的组件超过45个,用这些组件可以构建跟HTML5 和 CSS3 兼容的程序,这些程序...

    张善友
  • 全栈工程师权威指南

    根据 Stack Overflow 2016年开发者调查显示,全栈工程师是最受欢迎的开发者职业。毫无疑问现在有许多在线或个人课程来帮助程序员成为全栈开发者,甚至...

    前端黑板报
  • (转) 对MVC、MVP、MVVM的理解

    最近看了一堆js框架的文档,有点乱,想分门别类整理一下,但是首先需要搞清楚这些框架里面经常谈论的MV*之类的概念。MVC的概念很早就知道,现在发现还有MVP、M...

    前端黑板报
  • JS正则表达式入门篇

    兰翠 就职于爱屋吉屋,出身后端现混迹于前端 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或...

    前端黑板报
  • 一个数字截取引发的精度问题(四)

    这篇是精度问题的最后一篇,要是想看前面的,请看微信历史记录。 做前端的都感觉JS这语言巨坑无比,兼容性让你摸不到头脑,甚至还会让你脱发。一些初学者遇到: 0.1...

    前端黑板报
  • 构建离线web应用(二)

    本文由哔哩哔哩前端工程师 墨白 翻译分享 上一篇文章中,我们成功尝试使用 service workers。我们也可以在应用中缓存一些资源。这篇文章我们准备了解这...

    前端黑板报
  • (转)JS算法系列-数组去重

    1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值是否在数组的方法“indexOf”是ECM...

    前端黑板报
  • 一个数字截取引发的精度问题(一)

    上周有一个“收银台”的业务需要重构,其中有一个需求: 收益计算的结果,取小数点后两位但不进行四舍五入,若不足则补0。 看到这个需求你应该会第一个想到: numb...

    前端黑板报
  • JavaScript代码风格要素

    1920年,由威廉·斯特伦克(William Strunk jr .)撰写的《英语写作手册:风格的要素(The Elements of Style)》出版了,这...

    前端黑板报

扫码关注云+社区

领取腾讯云代金券