入力した値を取り、それを科学的記数法に変換する関数を作成したい(N x 10 ^ a)
いろいろ試してみましたが、うまくいかないようです。
例:
200と入力します。コンバーターはそれを2x 10 ^ 2に変換します
ある時点で、係数と指数を数値として使用したいと思いました。
これを行う場合は、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)
を使用できます。
このような基数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と表示されますのでご注意ください。