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

33
我希望创建一个函数,这个函数可以接收输入值并将其转换为科学计数法(N x 10^a)。
我尝试了许多不同的方法,但好像都不对。
例如:
我输入200。该转换器将其转换为2 x 10^2。

还希望获得更具体的信息。例如,最大值有多少个有效数字?2,121,212 -> 2 x 10^6 还是 2.1 x 10^6 等等? 我猜这个“截止点”是多少? - Sephallia
3个回答

73

2
哇,我不知道这个存在 :) - Felix Kling
哇,我也不知道这个存在 :) - Amadan
2
太棒了!但有没有一种方法可以呈现为N x 10^a的形式?尽管如此,我仍然可以使用这个! - tarcin
2
@Samar 如果你想的话,可以使用字符串替换将 e 替换为 x 10,尽管它们意思相同。 - Hunter McMillen
3
toExponential 方法和 toFixed 方法一样,也接受一个 digits 参数来控制指数符号前的小数部分保留几位数字。 - Ahmed Fasih

13

曾经我想将系数和指数作为数字使用。

如果您想这样做,可以使用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)


1
谢谢,这正是我想要的。很惊讶这不是标准库的一部分。你也可以使用点自由风格,像这样:num.toExponential().split('e').map(Number) - JP Lew

1
如果您想要像这样的十进制格式:
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。所以请注意这一点。

你列出的函数仅适用于小于1的数字。如果您使用-n而不是(Math.abs(n)),它也将适用于大于1的值,例如将155.0002映射为1.55 x 10^2。 - Tiercelet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接