js 精确计算

津津乐道
• 阅读 2047

 
// 调用:accAdd(arg1,arg2)
// 返回值:arg1加上arg2的精确结果

export function accAdd(arg1, arg2) {
  if (arg1 !== undefined && arg2 !== undefined) {
    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;
  }
}

 
// 调用:accSub(arg1,arg2)
// 返回值:arg1减上arg2的精确结果

export function accSub(arg1, arg2) {
  return accAdd(arg1, -arg2);
}

 
// 调用:accMul(arg1,arg2)
// 返回值:arg1乘以arg2的精确结果

export function accMul(arg1, arg2) {
  if (arg1 !== undefined && arg2 !== undefined) {
    var m = 0;
    var s1 = arg1.toString();
    var 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);
  }
}

 
// 调用:accDiv(arg1,arg2)
// 返回值:arg1除以arg2的精确结果

export function accDiv(arg1, arg2) {
  if (arg1 !== undefined && arg2 !== undefined) {
    var t1, t2, r1, r2;
    try {
      t1 = arg1.toString().split('.')[1].length;
    } catch (e) {
      t1 = 0;
    }
    try {
      t2 = arg2.toString().split('.')[1].length;
    } catch (e) {
      t2 = 0;
    }
    r1 = Number(arg1.toString().replace('.', ''));
    r2 = Number(arg2.toString().replace('.', ''));
    return accMul(r1 / r2, Math.pow(10, t2 - t1));
  }
}
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java debug体系为什么不能debug到jdk里所有的代码
作为java码农肯定碰到过当我们debug到一些class的时候,发现当进入到某个方法里是看不到声明的入参名,取而代之的是arg0,arg1等,继续深入更是看不到局部变量,这主要是java类编译的时候没有加g参数导致的,而为什么我们自己在eclipse中写的代码却是可以正常跟踪呢,原因很简单,因为eclipse自行编译的时候是带g参数编译的。  
Wesley13 Wesley13
3年前
java精确计算工具类
java精确计算工具类importjava.math.BigDecimal;importjava.math.RoundingMode;importjava.math.BigDecimal;importjava.text.DecimalFormat;importorg.springfram
Stella981 Stella981
3年前
Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]
!(https://oscimg.oschina.net/oscnet/0c930a24d551e0970e306d79a64f7148999.gif)!(https://oscimg.oschina.net/oscnet/3bca3884ca653a179e799d56df36d4622b3.png)解决方法:<selectid"sel
Wesley13 Wesley13
3年前
Java BigDecimal使用
1.引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。测试用例:publi
Stella981 Stella981
3年前
Excel中最精确的计算年龄的公式
身份证算年龄假设A1是身份证号所在单元格IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())INT(MID(A1,7,4)))1,IF(MONTH(NOW())INT(MID(A1,11,2)),YEAR(NOW())INT(MID(A1,7,4)),IF(DAY(NOW(
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
Java日期时间API系列30
  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用
Stella981 Stella981
3年前
Jmeter 通过json Extracted 来获取 指定的值的id
在没有精确或模糊查询的接口时可以使用jmeter获取指定的值的ID1importjava.lang.String;2StringgetTargetName"iphone632g";3//判读相应结果中是否包含指定值:iphone632g4booleancontainsCategoryp