iteye_15788 2010-03-30 12:34
浏览 335
已采纳

请问用javascript加减法计算如何保留最少2位小数呢?

加法:
Java 代码

  1. //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  2. //调用:accAdd(arg1,arg2)
  3. //返回值:arg1加上arg2的精确结果
  4. function accAdd(arg1,arg2){
  5. var r1,r2,m;
  6. try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
  7. try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
  8. m=Math.pow(10,Math.max(r1,r2))
  9. return (arg1*m+arg2*m)/m
    1. }

    2. //给Number类型增加一个add方法,调用起来更加方便。
    3. Number.prototype.add = function (arg){
    4. return accAdd(arg,this);
    5. }

//说明: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);
}

减法
Java 代码

  1. //说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
  2. //调用:accSub(arg1,arg2)
  3. //返回值:arg1减上arg2的精确结果
  4. function accSub(arg1,arg2){
  5. return accAdd(arg1,-arg2);
  6. }

  7. //给Number类型增加一个sub方法,调用起来更加方便。
  8. Number.prototype.sub = function (arg){
    1. return accSub(this,arg);
    2. }

//说明:javascript的减法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的减法结果。
//调用:accSub(arg1,arg2)
//返回值:arg1减上arg2的精确结果
function accSub(arg1,arg2){

return accAdd(arg1,-arg2);
}

//给Number类型增加一个sub方法,调用起来更加方便。
Number.prototype.sub = function (arg){
return accSub(this,arg);
}

乘法
Java 代码

  1. //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  2. //调用:accMul(arg1,arg2)
  3. //返回值:arg1乘以arg2的精确结果
  4. function accMul(arg1,arg2)
  5. {
  6. var m=0,s1=arg1.toString(),s2=arg2.toString();
  7. try{m+=s1.split(".")[1].length}catch(e){}
  8. try{m+=s2.split(".")[1].length}catch(e){}
  9. return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
    1. }

    2. //给Number类型增加一个mul方法,调用起来更加方便。
    3. Number.prototype.mul = function (arg){
    4. return accMul(arg, this);
    5. }

//说明: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);
}

除法
Java 代码

  1. //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
  2. //调用:accDiv(arg1,arg2)
  3. //返回值:arg1除以arg2的精确结果
  4. function accDiv(arg1,arg2){
  5. var t1=0,t2=0,r1,r2;
  6. try{t1=arg1.toString().split(".")[1].length}catch(e){}
  7. try{t2=arg2.toString().split(".")[1].length}catch(e){}
  8. with(Math){
  9. r1=Number(arg1.toString().replace(".",""))
    1. r2=Number(arg2.toString().replace(".",""))
    2. return (r1/r2)*pow(10,t2-t1);
    3. }
    4. }

    5. //给Number类型增加一个div方法,调用起来更加方便。
    6. Number.prototype.div = function (arg){
    7. return accDiv(this, arg);
    8. }

我想实现的是以上代码计算后的结果最少要有2位小数,以0补位,计算后得到的如果小数位多,就不管,谢谢

2+2 结果为4.00
2.11111+2.11111=4.22222

  • 写回答

1条回答 默认 最新

  • suziwen 2010-03-30 13:25
    关注

    在处理完数学运算后,可以使用这个插件,他会根据你的要求截取指定的小数点位数

    [url]http://www.tuliofaria.net/jquery-floatnumber/[/url]

    这是DEMO
    [url]http://www.tuliofaria.net/projects/floatnumber/example.html[/url]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大