8

JavaScript で非常に大きな数値の値を非指数形式で取得する必要があります。Number.toFixed指数形式で文字列として返すだけで、これは私が持っていたものよりも悪いです。

これがNumber.toFixed返されるものです:

>>> x = 1e+31
1e+31
>>> x.toFixed()
"1e+31"

Number.toPrecisionも機能しません:

>>> x = 1e+31
1e+31
>>> x.toPrecision( 21 )
"9.99999999999999963590e+30"

私が欲しいのは:

>>> x = 1e+31
1e+31
>>> x.toNotExponential()
"10000000000000000000000000000000"

独自のパーサーを作成することもできますが、ネイティブの JS メソッドがあればそれを使用したいと思います。

4

5 に答える 5

4

toPrecision表示する桁数を指定するパラメーターとともに使用できます。

x.toPrecision(31)

ただし、私がテストしたブラウザの中で、上記のコードはFirefoxでのみ機能します。ECMAScript仕様によると、の有効な範囲はtoPrecision1〜21であり、IEとChromeの両方がRangeErrorそれに応じてスローします。これは、JavaScriptで使用される浮動小数点表現では、実際には31桁の精度で数値を表現できないためです。

于 2010-11-13T02:59:50.413 に答える
4

使用するNumber(string)

例 :

var a = Number("1.1e+2");

戻る :

a = 110

于 2015-07-12T09:01:20.210 に答える
1

答えは、そのような組み込み関数はありません。私は高低を検索しました。数値を符号、係数 (小数点の前の数字)、小数部 (小数点の後の数字)、および指数に分割するために使用する RegExp は次のとおりです。

/^([+-])?(\d+)\.?(\d*)[eE]([+-]?\d+)$/

「自分で巻く」が答えです。あなたはすでにそれを行っています。

于 2015-06-26T15:12:54.017 に答える
0

「10000000000000000000000000000000」?

誰もが1.0e+31よりもそれを見たいとは信じがたいです。

またはhtmlで:1031。しかし、ここに1つの方法があります。その多くは、負の指数(分数)用です。

function longnumberstring(n){
    var str, str2= '', data= n.toExponential().replace('.','').split(/e/i);
    str= data[0], mag= Number(data[1]);
    if(mag>=0 && str.length> mag){
        mag+=1;
        return str.substring(0, mag)+'.'+str.substring(mag);            
    }
    if(mag<0){
        while(++mag) str2+= '0';
        return '0.'+str2+str;
    }
    mag= (mag-str.length)+1;
    while(mag> str2.length){
        str2+= '0';
    }
    return str+str2;
}



input: 1e+30
longnumberstring: 1000000000000000000000000000000
to Number: 1e+30
input: 1.456789123456e-30
longnumberstring: 0.000000000000000000000000000001456789123456
to Number: 1.456789123456e-30
input: 1.456789123456e+30
longnumberstring: 1456789123456000000000000000000
to Number: 1.456789123456e+30
input: 1e+80 longnumberstring: 100000000000000000000000000000000000000000000000000000000000000000000000000000000
to Number: 1e+80
于 2010-11-13T04:26:09.403 に答える
0

文字列関数を使用して、JavaScript の指数出力を拡張することができます。確かに、私が思いついたことはやや不可解ですが、 の後の指数eが正の場合は機能します。

var originalNumber = 1e+31;
var splitNumber = originalNumber.toString().split('e');

var result;
if(splitNumber[1]) {
    var regexMatch = splitNumber[0].match(/^([^.]+)\.?(.*)$/);
    result =
        /* integer part */ regexMatch[1] +
        /* fractional part */ regexMatch[2] +
        /* trailing zeros */ Array(splitNumber[1] - regexMatch[2].length + 1).join('0');
} else result = splitNumber[0];
于 2010-11-13T03:45:51.953 に答える