js高精度浮点数运算

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 04:04   11   0

贴代码:

// 自定义高精度浮点数运算
// 对象格式写法
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));

测试结果如下:

加法

减法

乘法

除法

转载于:https://my.oschina.net/lonelydawn/blog/804463

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP