美文网首页Web 前端开发
用js转换科学计数法为数字

用js转换科学计数法为数字

作者: 厂厂哥 | 来源:发表于2018-01-07 18:08 被阅读1814次

    前言

    今天有个需求,是把两个只包含数字的字符串的数字相加结果以字符串形式导出。原本以为很简单,结果发现数字过大时会自动准换为科学计数法表达,而且精度不高,为此专门去百度了下(vpn挂了,谷歌不了),结果发现百度的答案没有什么可行性,最后自己写了下。

    思路

    emmmm,因为过大的数字会直接转换为科学技术法表示,所以不能用过大数字相加,就想分解数来按小学老师教的那样用数位来加,结果发现切实可行,精度挺高。

    代码部分

    function sumStrings(a, b) {//输入的a,b都是只包含数字的字符串
        var output;
        output = a * 1 + b * 1;//转换为数字
        if (output.toString().indexOf("+") == -1) {//判断不为科学计数法输出
            output = output.toString();
        } else {//判断为科学输入法输出
            a = a.split("");//字符串分割数组
            b = b.split("");//字符串分割数组
            if (a.length > b.length) {
                output = test(a, b);
            } else {
                output = test(b, a);
            }
        }
        return output;
    }
    //把科学计数法准换为数字
    function test(a, b) {//要求a的长度比b的长度大
        var i, arr = [],
            j = 0;
        for (i = 0; i < a.length; i++) {
            if (i < b.length) {//在共有的位进行操作
                var c = a[a.length - i - 1] * 1 + b[b.length - i - 1] * 1;//取得同位相加数
                if (c < 10) {//判断同位相加数小于10
                    if (j + c === 10) {//判断位数加进位数为10
                        arr.unshift(0);//位数为0
                        j = 1;//重置进位为1
                    } else {//判断位数加进位数不为10
                        arr.unshift(j + c);//位数为进位加同位相加数
                        j = 0;//重置进位为0
                    }
                } else {//判断同位相加数大于等于10
                    arr.unshift(c + j - 10);//位数为c+j-10
                    j = 1;//重置进位为1
                }
            } else {//非共有的位操作
                var c = a[a.length - i - 1] * 1;//取得位
                if (j === 1) {//进位判断
                    if ((j + c) === 10) {//判断位数加进位数为10
                        arr.unshift(0);//位数为0
                        j = 1;//重置进位为1
                    } else {//判断位数加进位数不为10
                        arr.unshift(j + c);//位数为进位加同位相加数
                        j = 0;//重置进位为0
                    }
                } else {
                    arr.unshift(c);//进位为0,直接放入
                }
            }
        }
        if (j === 1) { arr.unshift(1) }//最后判断若a和b同长度,且首位相机大于等于0是,数组添加一位1
        return arr.join("");//最后字符串形式输出
    }
    

    后记

    写的还是有点马虎,思路大体就是这样了,有空再重写封装好一点吧。

    相关文章

      网友评论

        本文标题:用js转换科学计数法为数字

        本文链接:https://www.haomeiwen.com/subject/drlmnxtx.html