关于JS科学计数法

做项目的时候遇到过, JS 当小数位数, 超出7位的时候,会自动转换为科学计数法。 处理方案吧,有俩种: 1.第一种有正则匹配。具体方法网上有很多。 2.第二种就是强制保留位数

var num=312312312312;
var rs3=num.toFixed(14);
console.log(rs3)

关于处理小数位数JS有可以直接使用的api(例如下面的保留有效数字俩位)

var bit_str = f.toPrecision(2);

随着公司项目的进展科学计数的问题日益严重,所以必须对方法进行更新,下面的方法就是合并所有可用的方法,并且兼容处理各种计算问题的一个方法。后期应该还会更新的吧。

好的废话不多说,咱开始贴代码

function to_num(num) {
        num == '-' ? num = 0 : '';
        try {
            var bit_str = num.toString().split('.')[1];
            if(num%1 == 0){
                return parseFloat(num);
                return false;
            }
            for(var i=bit_str.length;i>=0;i--){
                var n = bit_str.substr(i, 1);
                if(n != 0){
                    var m = new Number(num);
                    return m.toFixed(i + 1);
                    return false;
                }
            }
        }catch(e){}
    }
    // 科学计数法转换为数字
    function scientificToNumber(num) {
        var str = num.toString();
        var reg = /^(\d+)([Ee])([\-]?\d+)$/;
        var arr, len,
                zero = '';
        if (!reg.test(str)) {
            if(num.toString().indexOf('.') != -1 && num.toString().indexOf('e') != -1){
                var len = Math.abs(num.toString().split('e')[1]);
                var len1 = num.toString().split('.')[1].split('e')[0];
                var num_ = parseFloat(num).toFixed(len1.length + len);
                return num_;
            }else {
                return to_num(num);
            }
        } else {
            arr = reg.exec(str);
            len = Math.abs(arr[3]) - 1;
            for (var i = 0; i < len; i++) {
                zero += '0';
            }

            return '0.' + zero + arr[1];
        }
    }
    var html = '<div>' + scientificToNumber('0.9e-10') +'</div>';
    $('body').html(html);

需要的小伙伴可用拿去用,处理极限小的科学计数法应该有用。 后期应该还有优化的可能性。暂时先放在这这样。

猜你喜欢

转载自my.oschina.net/u/3074255/blog/1625954