JS ES6 加减乘除法小数浮点数计算BUG解决

简介:

2018年3月6日

JS ES6 加减乘除法小数浮点数计算BUG解决

//检测是否为数字

let num = (a) => {

    if(a != null && a.toString() != "") {

        let r = /^-?(0|[1-9]+\d*|[1-9]+\d*\.\d+|0\.\d+)$/;

        if(r.test(a.toString())) {

            return true;

        }

    }

    return false;

}

 

//加法

let plus = (a, b) => {

    if(!num(a) || !num(b)) {

        return null;

    }

    let c, d, m;

    try {

        c = a.toString().split(".")[1].length;

    } catch(e) {

        c = 0;

    }

    try {

        d = b.toString().split(".")[1].length;

    } catch(e) {

        d = 0;

    }

    m = Math.pow(10, Math.max(c, d));

    return(a * m + b * m) / m;

}

 

//减法

let minus = (a, b) => {

    if(!num(a) || !num(b)) {

        return null;

    }

    let c, d, m, n;

    try {

        c = a.toString().split(".")[1].length;

    } catch(e) {

        c = 0;

    }

    try {

        d = b.toString().split(".")[1].length;

    } catch(e) {

        d = 0;

    }

    m = Math.pow(10, Math.max(c, d));

    return(a * m - b * m) / m;

// n = (c >= d) ? c : d;

// return((a * m - b * m) / m).toFixed(n);//数字转换字符串,保留n位小数

}

 

//乘法

let multiply = (a, b) => {

    let m = 0,

    c = a.toString(),

    d = b.toString();

    try {

        m += c.split(".")[1].length

    } catch(e) {}

    try {

        m += d.split(".")[1].length

    } catch(e) {}

    return Number(c.replace(".", "")) * Number(d.replace(".", "")) / Math.pow(10, m)

}

 

//除法

let division = (a, b) => {

    if(!num(a) || !num(b)) {

        return null;

    }

    let c, d, f, g;

    try {

        c = a.toString().split(".")[1].length;

    } catch(e) {

        c = 0;

    }

    try {

        d = b.toString().split(".")[1].length;

    } catch(e) {

        d = 0;

    }

    with(Math) {

        f = Number(a.toString().replace(".", ""));

        g = Number(b.toString().replace(".", ""));

        return(f / g) * pow(10, d - c);

    }

}
目录
相关文章
|
22天前
|
JavaScript 前端开发
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
JS浮点数精度问题及高精度小数运算:BigNumber解决方案
91 0
|
4天前
|
JavaScript 前端开发
|
2月前
|
JavaScript
js计算时间差,包括计算,天,时,分,秒
js计算时间差,包括计算,天,时,分,秒
221 16
|
2月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
11天前
|
存储 JavaScript 前端开发
JS的ES6知识点
【10月更文挑战第19天】这只是 ES6 的一些主要知识点,ES6 还带来了许多其他的特性和改进,这些特性使得 JavaScript 更加现代化和强大,为开发者提供了更多的便利和灵活性。
15 3
|
22天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
21 4
|
26天前
|
自然语言处理 JavaScript 前端开发
JavaScript高级——ES6基础入门
JavaScript高级——ES6基础入门
19 1
|
6天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
16 0
|
29天前
|
前端开发 JavaScript 小程序
JavaScript的ES6中Promise的使用以及个人理解
JavaScript的ES6中Promise的使用以及个人理解
16 1
|
29天前
|
缓存 JavaScript 前端开发
探索Vue.js中的计算属性与侦听器
【10月更文挑战第5天】探索Vue.js中的计算属性与侦听器
19 1