6

2.7934087356437704e+56数値全体を表示したいような値を取得するのではなく、完全に表示したい非常に大きな数値を出力することが多いJavaScriptコードがあります。JSでこれを実現することは可能ですか?

4

2 に答える 2

3

このように数が多いと、Javascript の精度が失われます。返される指数形式は、Javascript が表現できる最も正確な形式です。ただし、精度の低下を気にせず、展開された数値の文字列だけが必要な場合は、独自の関数を使用してこれを行うことができます。これをネイティブに行うメソッドが見つからなかったため、自分で追加する必要があります。

Jonas Raoni Soares Silvaによるこのスニペットを見つけました。

String.prototype.expandExponential = function(){
    return this.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 bignum = 2.7934087356437704e+56;
> (bignum+'').expandExponential();
"279340873564377040000000000000000000000000000000000000000"

最初に数値を文字列にキャストする必要があるため、+''

正確な精度が本当に必要な場合は、Big Numberjavascript-bignumなどのライブラリを使用してみてください。

于 2013-04-17T18:02:44.077 に答える
1

JavaScript では、すべての数値が浮動小数点数であるため、絶対的な精度はありません。

于 2013-04-17T17:53:40.943 に答える