入力した値を取り、それを科学的記数法に変換する関数を作成したい(N x 10 ^ a)
いろいろ試してみましたが、うまくいかないようです。
例:
200と入力します。コンバーターはそれを2x10^2に変換します
入力した値を取り、それを科学的記数法に変換する関数を作成したい(N x 10 ^ a)
いろいろ試してみましたが、うまくいかないようです。
例:
200と入力します。コンバーターはそれを2x10^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
orを置き換えましe+
た(正の指数の場合)。
小数点以下の桁数を指定したい場合toExponential(NumberOfDigits)
は、上記の例で使用できます。
このような10進数の形式が必要な場合:
m x 10 n
次に、次のような関数を使用できます。
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と表示されますのでご注意ください。