How can I convert numbers into scientific notation?

拟墨画扇 提交于 2019-11-27 09:24:14

You can do something like this:

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

fiddle: http://jsfiddle.net/Q8avJ/9/

At some point I wanted to use the coefficient and the exponent as numbers.

If you want to do that, you can use toExponential function, split the string and convert the items of the array to numbers.

In the following snippet I assign the numbers to the numInSciNot object and print them in the wanted format.

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}`);

If you don't want to use them as numbers you can just use replace:

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

In this snippet I've used RegExp to replace e or e+(in the case of positive exponent).

If you want to specify the number of digits after the decimal point, you can use toExponential(NumberOfDigits) in the above examples.

If you want a base 10 format like this:

m x 10n

Then you can use a function like this:

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>';
}

Test it out: http://jsfiddle.net/u1hd4zm9/

Only odd thing is that the toFixed method (in Chrome at least) will not round exact halves up, but down. For instance if you run this code:

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

It will print '2.5' and not '2.6' like you expect. However if you run this code:

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

It will print 3. So be aware of that.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!