web-dev-qa-db-ja.com

数値を科学的記数法に変換するにはどうすればよいですか?

入力した値を取り、それを科学的記数法に変換する関数を作成したい(N x 10 ^ a)

いろいろ試してみましたが、うまくいかないようです。

例:

200と入力します。コンバーターはそれを2x 10 ^ 2に変換します

25
Samar

あなたはこのようなことをすることができます:

a = 200
a.toExponential(); //output 2e+2

フィドル: http://jsfiddle.net/Q8avJ/9/

58
Hunter McMillen

ある時点で、係数と指数を数値として使用したいと思いました。

これを行う場合は、toExponential関数を使用して文字列を分割し、配列の項目を数値に変換できます。

次のスニペットでは、numInSciNotオブジェクトに番号を割り当て、必要な形式で出力します。

_const num = 200;
const numInSciNot = {};
[numInSciNot.coefficient, numInSciNot.exponent] =
  num.toExponential().split('e').map(item => Number(item));
 
console.log(`${numInSciNot.coefficient} x 10^${numInSciNot.exponent}`);_

それらを数値として使用したくない場合は、replaceを使用できます。

_const num = 200;
 
console.log(num.toExponential().replace(/e\+?/, ' x 10^'));_

このスニペットでは、正規表現を使用してeまたは_e+_(正の指数の場合)を置き換えました。

小数点以下の桁数を指定したい場合は、上記の例でtoExponential(NumberOfDigits)を使用できます。

3

このような基数10の形式が必要な場合:

mx 10n

次に、次のような関数を使用できます。

function writeScientificNum(p_num, p_precision) {
    var n = Math.round(Math.log10(a));
    var m = (p_num * (Math.pow(10,Math.abs(n)))).toFixed(p_precision);
    document.getElementById("outputTxt").innerHTML = m.toString() + ' x 10<sup>' + n.toString() + '</sup>';
}

テストしてください: http://jsfiddle.net/u1hd4zm9/

奇妙なことに、toFixedメソッド(少なくともChrome)では)は正確に半分に切り上げられませんが、切り下げられます。たとえば、次のコードを実行すると、次のようになります。

var test = 2.55;
alert(test.toFixed(1));

期待どおりに「2.6」ではなく「2.5」が出力されます。ただし、このコードを実行する場合:

var test = 2.5;
alert(test.toFixed(0));

3と表示されますのでご注意ください。

1
Ian