js float类型数据的加减乘除bug修复

var FloatCalFun=new Object();
//获取参数精度,如果为整数则精度为0
FloatCalFun._getPrecision=function(arg){
  if(arg.toString().indexOf(".")==-1){
     return 0;
  }else{
     return arg.toString().split(".")[1].length;
  }	
}
//获取小数的整数形式
FloatCalFun._getIntFromFloat=function(arg){
  if(arg.toString().indexOf(".")==-1){
     return arg;
  }else{
     return Number(arg.toString().replace(".",""));
  } 
}
//乘法
FloatCalFun.floatMulti=function(arg1,arg2){
  var precision1=this._getPrecision(arg1);
  var precision2=this._getPrecision(arg2);
  var tempPrecision=0;
  
  tempPrecision+=precision1;
  tempPrecision+=precision2;
  var int1=this._getIntFromFloat(arg1);
  var int2=this._getIntFromFloat(arg2);
  return (int1*int2)*Math.pow(10,-tempPrecision);
}
//加法
FloatCalFun.floatAdd=function(arg1,arg2){
  var precision1=this._getPrecision(arg1);
  var precision2=this._getPrecision(arg2);
  var temp=Math.pow(10,Math.max(precision1,precision2));
  return (this.floatMulti(arg1,temp)+this.floatMulti(arg2,temp))/temp;
}
//减法
//arg1 被减数
//arg2 减数
FloatCalFun.floatSubtract=function(arg1,arg2){
  var precision1=this._getPrecision(arg1);
  var precision2=this._getPrecision(arg2);
  var temp=Math.pow(10,Math.max(precision1,precision2));
  return (this.floatMulti(arg1,temp)-this.floatMulti(arg2,temp))/temp;
}
除法
//arg1 被除数
//arg2 除数
FloatCalFun.floatDiv=function(arg1,arg2){
   var precision1=this._getPrecision(arg1);  
   var precision2=this._getPrecision(arg2); 
   var int1=this._getIntFromFloat(arg1);  
   var int2=this._getIntFromFloat(arg2);   
   var result=(int1/int2)*Math.pow(10,precision2-precision1);  
   return result;  
}
FloatCalFun.floatAdd(1.9,0.01);
alert(FloatCalFun.floatAdd(1.9,0.01));
alert(FloatCalFun.floatSubtract(1.9,0.01));
alert(FloatCalFun.floatDiv(1.9,0.01));
alert(FloatCalFun.floatMulti(1.9,0.01));
alert(1.9-0.01);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值