我想制作一个接受输入值并将其转换为科学计数法的函数(N x 10^a)
我尝试了很多不同的事情,但我似乎无法做到正确。
例子:
我输入 200。转换器将其转换为 2 x 10^2
我想制作一个接受输入值并将其转换为科学计数法的函数(N x 10^a)
我尝试了很多不同的事情,但我似乎无法做到正确。
例子:
我输入 200。转换器将其转换为 2 x 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^'));
在这个片段中,我使用 RegExp 替换e
或e+
(在正指数的情况下)。
如果要指定小数点后的位数,可以toExponential(NumberOfDigits)
在上面的示例中使用。
如果你想要这样的 base 10 格式:
米× 10
然后你可以使用这样的函数:
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。所以请注意这一点。