js 计算失精是因为js 先将10十进制代码转化为2进制,再计算导致

具体解决方案:

1. 加

function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[].length}catch(e){r1=}
try{r2=arg2.toString().split(".")[].length}catch(e){r2=}
m=Math.pow(,Math.max(r1,r2))
return (arg1*m+arg2*m)/m
}

2. 减

function Subtr(arg1,arg2){
var r1,r2,m,n;
try{r1=arg1.toString().split(".")[].length}catch(e){r1=}
try{r2=arg2.toString().split(".")[].length}catch(e){r2=}
m=Math.pow(,Math.max(r1,r2));
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
}

更新:

个别情况, 加减依旧有问题, 更新如下:

//加
function accAdd(arg1, arg2) {
var r1,
r2,
m,
num1,
num2;
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));
num1 = r1 == 0? parseInt(arg1 * m): (parseInt(`${arg1.toString().replace('.', '')}`)*m/(Math.pow(10, r1)));
num2 = r2 == 0? parseInt(arg2 * m): (parseInt(`${arg2.toString().replace('.', '')}`)*m/(Math.pow(10, r2)));
return (num1 + num2) / m;
} //减 function Subtr(arg1, arg2) {
var r1,
r2,
m,
n,
num1,
num2;
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));
n = (r1 >= r2) ? r1 : r2;
num1 = r1 == 0? parseInt(arg1 * m): (parseInt(`${arg1.toString().replace('.', '')}`)*m/(Math.pow(10, r1)));
num2 = r2 == 0? parseInt(arg2 * m): (parseInt(`${arg2.toString().replace('.', '')}`)*m/(Math.pow(10, r2)));
return ((num1 - num2) / m).toFixed(n);
}

  

3.乘

function accMul(arg1,arg2) {
var m=,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[].length}catch(e){}
try{m+=s2.split(".")[].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(,m)
}

4.除

function accDiv(arg1,arg2){
var t1 = , t2 = , r1, r2;
try {
t1 = arg1.toString().split(".")[].length
} catch (e) {}
try {
t2 = arg2.toString().split(".")[].length
} catch (e) {}
r1 = Number(arg1.toString().replace(".", ""))
r2 = Number(arg2.toString().replace(".", ""))
return getMultiFormat((r1 / r2), Math.pow(, t2 - t1));
}

js 加减乘除失精的更多相关文章

  1. js加减乘除丢失精度

    js加减乘除(学了那么久现在才注意到汗==!) /** ** 除法函数,用来得到精确的除法结果 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精 ...

  2. js加减乘除在线计算器代码

    js加减乘除在线计算器代码 在线演示本地下载

  3. js小数点失精算法修正

    在用js计算0.07*100时候竟然=7.000000000000001 关于js失精算法你都遇到哪些,让我们一起来细数一下吧 console.log(0.07*100); // 7.00000000 ...

  4. js 加减乘除以及四舍五入 新写法

    1 四舍五入 eg: (1.23).round() = 1.2 (1.2456).round(3) = 1.246 Number.prototype.round = function (count) ...

  5. js加减乘除精确计算

    Javascript精确计算时的bug JS无法进行精确计算的bug 在做CRM,二代审核需求审核详情页面时.需要按比例(后端传类似0.8的小数)把用户输入的数字显示在不同的地方. 在做dubheIn ...

  6. javascript基础(001)-js加减乘除注意事项(含类型转换)

    一,加减乘除注意事项: 1.任意类型'+'字符串都被强转字符串 2.数字和布尔类型'+'undefined 结果为 NaN (Not a Number) 3.'-','*','/'操作会尝试把数据转为 ...

  7. 解决js加减乘除精度问题

    // 加法 const accAdd = (arg1, arg2) => {     var r1, r2, m;     try {         r1 = arg1.toString(). ...

  8. js加减乘除函数

    经常用到算数的时候,可以直接用:// 除法函数function accDiv(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toS ...

  9. Nodejs学习笔记(十七)--- 浮点运算decimal.js

    目录 前言 JavaScript加减乘除运算 decimal.js加减乘除运算 前言 开发过程中免不了有浮点运算,JavaScript浮点运算的精度问题会带来一些困扰 JavaScript 只有一种数 ...

随机推荐

  1. PythonStudy——文件操作习题 Document operation exercises

    # 1.统计文件数据中字母e出现的次数(不区分大小写)# 文件内容:hello friend, can you speak English!# 结果:4# 分析:将文件内容读出,然后统计读出的字符串中 ...

  2. DevExpress GridView 整理(转)

    DevExpress GridView 那些事儿 1:去除 GridView 头上的 "Drag a column header here to group by that column&q ...

  3. C++类中this指针的理解

    先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等.这样就像变量x具有int类 ...

  4. Android中的Sqlite中的onCreate方法和onUpgrade方法的执行时机

    1.今天在做数据库升级的时候,遇到一个问题,就是onCreate方法和onUpgrade方法的执行时机的问题,这个当时在操作的时候,没有弄清楚,很是迷糊,后来看了相关的博客由于转发受限所以copy了一 ...

  5. LDAP认证模式简介

    今天发现公共服务中有ldap数据库服务,先大概了解一下ldap,转载下面的文章.原文链接:https://www.jianshu.com/p/d3f8c8f5d661 另外记录一篇文章地址:https ...

  6. auth系统与类视图

    用户 权限 密码哈希系统 表单视图工具 密码强度检查   第三方或自定义 限制登录尝试 第三方验证     (qq,微信,微博登录) 对象级权限 auth    user用户表   group分组表 ...

  7. is,as,类库

    is和as运算符: 所有类型的基类 object类型 - 基类:所有类型的基类,就类似是整个生物圈的生物类,是个大的概念 object o1 = new Random(); //object可以承载R ...

  8. Linux的命令技巧

    一.使用apt-get installl 方法安装的库或者程序一般的路径如下 1.下载的软件存放位置       /var/cache/apt/archives 2.安装后软件默认位置    /usr ...

  9. bootstrap-treeview初使用

    <div id="tree">div> $(function () { function getTree() { var data = [{ text: &quo ...

  10. Linux权限管理之ACL权限

    注:转载自:https://www.cnblogs.com/ysocean/p/7801329.html 目录 1.什么是 ACL 权限? 2.查看分区 ACL 权限是否开启:dump2fs ①.查看 ...