3

私はこの大きな数を持っています:
21212202382541035306949186015338569645685453497668055588619610488832

Javascript は自動的に次のように短縮します:
2.1212202382540943e+67

しかし、私はそれを表のセルの中に固定で入れたので、合計で11桁以下にする必要があります。

たとえば、前述の数値がある場合、次のように変換する必要があります:
~2.1212e+67

そして、番号が次の場合:

128330558031338336 ~1.2833e+17と表示されるはずです

したがって、基本的には、数値の長さが 11 桁よりも長い場合、10 の累乗を加算し、数値の丸めを開始する必要があります。

JavaScriptでこれを行うにはどうすればよいですか?

で試しましsubstring()たが、表示される正確なパワーを決定するのに問題があります。


編集

終了スクリプトは次のようになります。

if ( num.length > 11 ) {
    num = parseFloat( num );
    var n = '~'+ num.toExponential( 4 );
} else {
    var n = num;
}

どうもありがとうブラック・マギー

4

2 に答える 2

7

ソース: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Number/toExponential

javascript には toExponential() があります

したがって、指数表現に合計 11 文字を残したい場合は、小数点以下の桁数を渡すことができます。

toExponential(5)2.12122e+67あなたの番号の可能性があります21212202382541035306949186015338569645685453497668055588619610488832

更新: w3school の代わりに mozilla からより良いソースを選択しました。ありがとう@TJクラウダー

更新 2: ソース: http://www.php.net/manual/en/language.types.float.php

php のround()場合、数値の科学的表記法の変換を強制的に使用する可能性があります。

于 2013-03-15T08:42:17.893 に答える
2

あなたの場合、toPrecisionの方が適切だと思います。

数値が大幅にずれている場合は、表のセルに合わせるためのトリックが必要になる場合があります。たとえば、有効桁数 8 桁で試し、文字列の長さをテストし、長すぎる場合は 7 桁、場合によっては 6 桁と 5 桁で再試行します。

更新:わかりました、次のコードで少し遊んでみました:

num = new Number(<your num>);
alert("prec: " + num.toPrecision(5) + " exp: " + num.toExponential(4));

出力例:

prec: 364.00 exp: 3.6400e+2
prec: 3.6435e+13 exp: 3.6435e+13

指数を常に表示するか、必要な場合にのみ表示するかによって異なります。前者の場合、 toPrecision() の方が優れています。可能であれば数値の固定小数点を残すため、同じ文字列長でより高い精度を得ることができます。常に指数関数が必要な場合は、 toExponential() の方が適しています。数値が常に指数関数的になるのに十分な大きさである場合、それは問題ではありません。

于 2013-03-15T08:48:07.000 に答える