如何将数字转换为科学记数法?

时间:2012-06-20 16:57:00

标签: javascript html5 math scientific-notation

我想制作一个输入值并将其转换为科学记数法的函数(N x 10 ^ a)

我尝试了很多不同的东西,但我似乎无法做到这一点。

示例:

我输入200.转换器将其转换为2 x 10 ^ 2

3 个答案:

答案 0 :(得分:56)

您可以这样做:

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

小提琴: http://jsfiddle.net/Q8avJ/9/

答案 1 :(得分:1)

如果您想要这样的基本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.5'而不是'2.6'。但是,如果您运行此代码:

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

它会打印3.所以要注意这一点。

答案 2 :(得分:1)

在某些时候,我想使用系数和指数作为数字。

如果要执行此操作,可以使用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^'));
 

在此代码段中,我使用RegExp替换了ee+(对于正指数而言)。

如果要指定小数点后的位数,可以在上面的示例中使用toExponential(NumberOfDigits)