js 关闭科学计数法

let a = 2;
let b = 1.99999999;

a - b = 9.99999993922529e-9
这里二者相减,得到了一个被自动转换成了科学计数法的数字。


请问有没有办法关闭这种自动转换?

计算精度缺失了,一个无限接近0的数,你想咋显示?2-1.999999 = 0 吗,那直接取整就行了。

试试https://blog.csdn.net/sinat_36422236/article/details/84591296  和https://blog.csdn.net/weixin_33725272/article/details/91749539?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-1.base

可以把科学计数法转换为字符串

    /**
     * @description 科学计数法转为string
     * @param {string, number} param
     */
    function scientificNotationToString(param) {
        let strParam = String(param)
        let flag = /e/.test(strParam)
        if (!flag) return param

        // 指数符号 true: 正,false: 负
        let sysbol = true
        if (/e-/.test(strParam)) {
            sysbol = false
        }
        // 指数
        let index = Number(strParam.match(/\d+$/)[0])
        // 基数
        let basis = strParam.match(/^[\d\.]+/)[0].replace(/\./, '')

        if (sysbol) {
            return basis.padEnd(index + 1, 0)
        } else {
            return basis.padStart(index + basis.length, 0).replace(/^0/, '0.')
        }
    }
scientificNotationToString(a-b)调用就行了,结果0.00000000999999993922529

因为有误差,想消除误差可以用下边的方法运算

    function mul(a, b) {
        var c = 0,
            d = a.toString(),
            e = b.toString();
        try {
            c += d.split(".")[1].length;
        } catch (f) {}
        try {
            c += e.split(".")[1].length;
        } catch (f) {}
        return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
    }
    function sub(a,b){
        var c, d, e;
        try {
            c = a.toString().split(".")[1].length;
        } catch (f) {
            c = 0;
        }
        try {
            d = b.toString().split(".")[1].length;
        } catch (f) {
            d = 0;
        }
        return e = Math.pow(10, Math.max(c, d)), (mul(a, e) - mul(b, e)) / e;
    }
mul(a,b)返回a,b相乘,sub(a,b)返回a,b相减

关闭是关闭不了的,但是你可以不用js的计算方法,我用的是numeral.js这个库的计算方式,不会出现这种问题

该库包含加减乘除的方法的。https://github.com/adamwdraper/Numeral-js