美文网首页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转换科学计数法为数字

    前言 今天有个需求,是把两个只包含数字的字符串的数字相加结果以字符串形式导出。原本以为很简单,结果发现数字过大时会...

  • JS超最大范围整数相加(包括负数)

    JS对于数字超过最大范围的数字会被立即转换为科学计数法显示,并且数字精度也有误差,所以要实现超出最大整数范围(包括...

  • pgsql设置timezone

    pgsql设置timezone语句如下: set timezone=UTC; 否则转换的时间为科学计数法计数

  • table表格的身份证号码、长数字不正确显示(科学计数法显示)

    PHP输出数字超过一定长度时,会自动转换为科学计数法的形式显示: 例子:440901199912222222在表格...

  • 2022-03-10 Warning messages: 1:

    用了各种方法都没能把矩阵转换成数值型的解决方案。 一开始数据内容里有科学计数法的“e”,用 设置默认不用科学计数法...

  • js 保留n位有效数字

    先转成科学计数法,再转为普通数字类型

  • js将科学计数转换为普通数字

    比如将6.034351754E8转为普通数字 来源:https://www.wanjunshijie.com/co...

  • 类型转换

    toFixed()根据小数点指定位数,数字转换为字符串toExponential()使用指数计数法,数字转换为字符...

  • 1024

    //1024 科学计数法(20 分)//科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达...

  • PAT1024

    1024 科学计数法 (20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 ...

网友评论

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

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