【问题标题】:How do I display whole number in JavaScript? [duplicate]如何在 JavaScript 中显示整数? [复制]
【发布时间】:2014-03-02 15:49:16
【问题描述】:

假设我是用 JS 写的:

var product = 50000000*39048902222211111111111111111111:
alert(product); //this gives me 1.9524451111105555e+39.

有没有办法显示整数,而不是 e+39 的东西?

【问题讨论】:

标签: javascript html math product


【解决方案1】:

您尝试表示的整数值大于 Javascript 可以处理的整数精度(固定精度算术)。最大安全整数为 -9007199254740991 到 9007199254740991 或 +/-(2^53-1)

虽然9007199254740992 可以表示,但它被认为是不安全的。为什么?试试这个jsFiddle

Javascript

alert(9007199254740992 + 1);

输出

9007199254740992

见specification ecma-262/5.1/#sec-8.5

但是您可以使用 arbitrary-precision arithmetic 的库,或者自己滚动。

使用一个这样的库,bignumber.js,使用 require.js 加载

Javascript

require.config({
    paths: {
        bignumberjs: 'https://raw.github.com/MikeMcl/bignumber.js/master/bignumber.min'
    }
});

require(['bignumberjs'], function (BigNumber) {
    BigNumber.config({
        EXPONENTIAL_AT: 100
    });

    var product = new BigNumber('50000000').times('39048902222211111111111111111111');

    alert(product);

});

输出

1952445111110555555555555555555550000000

关于 jsFiddle

【讨论】:

    【解决方案2】:

    试试这样的:

    Number.prototype.realValue = function(){
        return this.toString().replace(/^([+-])?(\d+).?(\d*)[eE]([-+]?\d+)$/, function(x, s, n, f, c){
            var l = +c < 0, i = n.length + +c, x = (l ? n : f).length,
            c = ((c = Math.abs(c)) >= x ? c - x + l : 0),
            z = (new Array(c + 1)).join("0"), r = n + f;
            return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
        });
    };
    

    访问方法如:

    var product = 50000000*39048902222211111111111111111111:
    alert(product.realValue())
    

    来源:Javascript display really big numbers rather than displaying xe+n

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 2021-03-28
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2021-10-15
    • 2019-11-11
    相关资源
    最近更新 更多