开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2401|回复: 1
收起左侧

[JS相关教程] Js四则运算函数代码

[复制链接]
结帖率:100% (6/6)
发表于 2012-9-16 23:18:05 | 显示全部楼层 |阅读模式   福建省泉州市
javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果


//除法函数,用来得到精确的除法结果

//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。

//调用:accDiv(arg1,arg2)

//返回值:arg1除以arg2的精确结果

function accDiv(arg1,arg2){

var t1=0,t2=0,r1,r2;

try{t1=arg1.toString().split(".")[1].length}catch(e){}

try{t2=arg2.toString().split(".")[1].length}catch(e){}

with(Math){

r1=Number(arg1.toString().replace(".",""));

r2=Number(arg2.toString().replace(".",""));

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

}

}

//给Number类型增加一个div方法,调用起来更加方便。

Number.prototype.div = function (arg){

return accDiv(this, arg);

};

//乘法函数,用来得到精确的乘法结果

//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。

//调用:accMul(arg1,arg2)

//返回值:arg1乘以arg2的精确结果

function accMul(arg1,arg2)

{

var m=0,s1=arg1.toString(),s2=arg2.toString();

try{m+=s1.split(".")[1].length}catch(e){}

try{m+=s2.split(".")[1].length}catch(e){}

return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);

}

//给Number类型增加一个mul方法,调用起来更加方便。

Number.prototype.mul = function (arg){

return accMul(arg, this);

};

//加法函数,用来得到精确的加法结果

//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。

//调用:accAdd(arg1,arg2)

//返回值:arg1加上arg2的精确结果

function accAdd(arg1,arg2){

var r1,r2,m;

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));

return (arg1*m+arg2*m)/m;

}

//给Number类型增加一个add方法,调用起来更加方便。

Number.prototype.add = function (arg){

return accAdd(arg,this);

};

//减法函数

function accSub(arg1,arg2){

var r1,r2,m,n;

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));

//last modify by deeka

//动态控制精度长度

n=(r1>=r2)?r1:r2;

return ((arg2*m-arg1*m)/m).toFixed(n);

}

///给number类增加一个sub方法,调用起来更加方便

Number.prototype.sub = function (arg){

return accSub(arg,this);

};

结帖率:95% (36/38)
发表于 2012-10-20 11:53:49 | 显示全部楼层   广东省揭阳市
数学看起来就头疼,不是吧,现在还是沙发啊。

点评

太冷清了 。。   福建省泉州市  发表于 2012-10-20 11:54
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表