如何在Javascript中检查指数值

如何在Javascript中检查指数值,javascript,math,Javascript,Math,我正在从CSV文件流式传输数据,并将某些值推送到数组中。其中一些值非常大,可以导出为指数值(例如5.02041E+12),一些值可能是正常值。 我希望有一个if语句来检查这些值是否为指数值,如果是,我将把它们传递给一个函数,该函数将它们转换为“正常”数(例如5020410000000)。有没有快速的方法可以做到这一点 (这些值被传递给API调用,这就是为什么它们需要转换为“正常”值的原因) 这可能是什么样的示例: valueOne = 5.02041E+12; valueTwo = 1234;

我正在从CSV文件流式传输数据,并将某些值推送到数组中。其中一些值非常大,可以导出为指数值(例如5.02041E+12),一些值可能是正常值。 我希望有一个if语句来检查这些值是否为指数值,如果是,我将把它们传递给一个函数,该函数将它们转换为“正常”数(例如5020410000000)。有没有快速的方法可以做到这一点

(这些值被传递给API调用,这就是为什么它们需要转换为“正常”值的原因)

这可能是什么样的示例:

valueOne = 5.02041E+12;
valueTwo = 1234;

if (valueOne.isExponential) {
  **pass to converting function**
}

//Output = 5020410000000

if (valueTwo.isExponential) {
  **pass to converting function**
}

//Output = 1234 (unchanged)

因此,我希望数组中的所有值都是“正常”值(即不是指数形式)

e+
e-
进行RegExp匹配

你开始的“数字”必须是文本,但你也应该做一些理智的检查。
在尝试任何基于数学的转换之前,最好先检查它是否大于MaxInt。

E+
E-
进行RegExp匹配

你开始的“数字”必须是文本,但你也应该做一些理智的检查。 在尝试任何基于数学的转换之前,检查它是否大于MaxInt可能是一个好主意。

您可以在每个数字上使用,并确保它可以转换

const valueOne = 5.02041E+12;
const valueTwo = 1234;

const precisionValueOne = valueOne.toPrecision(); // "5020410000000"
const precisionValue2 = valueTwo.toPrecision(); // "1234"
然后,您可以选择将其转换回数字:

sanitizedValueOne = Number(precisionValueOne); // 5020410000000
sanitizedValueTwo = Number(precisionValueTwo); // 1234
您只需在每个数字上使用,并确保它可以转换

const valueOne = 5.02041E+12;
const valueTwo = 1234;

const precisionValueOne = valueOne.toPrecision(); // "5020410000000"
const precisionValue2 = valueTwo.toPrecision(); // "1234"
然后,您可以选择将其转换回数字:

sanitizedValueOne = Number(precisionValueOne); // 5020410000000
sanitizedValueTwo = Number(precisionValueTwo); // 1234

数字是数字,值
5.02041E+12
5020410000000
内部没有差异:

//代码中的值:
e=5.02041E+12的var;
var Without=5020410000000;
console.log(withe,“?=”,withoute,withe==withoute);
//从字符串解析的值:
var stringwithe=“5.02041E+12”;
var stringwithoute=“5020410000000”;
var a=解析浮点(stringwithe);
var b=parseFloat(StringWithout);

日志(a,“?=”,b,a==b)数字是数字,值
5.02041E+12
5020410000000
内部没有差异:

//代码中的值:
e=5.02041E+12的var;
var Without=5020410000000;
console.log(withe,“?=”,withoute,withe==withoute);
//从字符串解析的值:
var stringwithe=“5.02041E+12”;
var stringwithoute=“5020410000000”;
var a=解析浮点(stringwithe);
var b=parseFloat(StringWithout);


日志(a,“?=”,b,a==b)
您能提供一个示例输入吗?@Jonaswillms刚刚编辑过-希望这会增加一些细节。它不会检查,而只是显式地表示“正常”表单中的所有值do
console.log(valueTwo)
而且要惊讶。@MBo的问题是,如果将非指数值传递给我的函数,并将其转换为“正常”值,则函数将中断。我认为添加一个简单的指数值检查比重构我的转换函数更容易。你能提供一个示例输入吗?@Jonaswillms刚刚编辑过-希望这会增加一些细节。这会更简单,不要检查,而只是在“普通”formDo
console.log(valueTwo)中显式表示所有值
而且要惊讶。@MBo的问题是,如果将非指数值传递给我的函数,并将其转换为“正常”值,则函数将中断。我认为添加一个简单的指数值检查比重构我的转换函数更容易。如果不能将数字与regexp匹配,将其转换为字符串将失去Ematcher@silicakes要么是JS
Number
s开头,要么是文本。如果它们是
Number
s,则不需要进行转换…您无法将数字与regexps匹配,将其转换为字符串将丢失Ematcher@silicakes要么是JS
Number
s开头,要么是文本。如果它们是
Number
s,则无需转换…很高兴听到!请随意将其标记为其他来这里查看的人可以接受的答案。阅读您链接的内容:如果省略了precision参数,则其行为为
Number.prototype.toString()
-这正是你正在做的。让我们把解释放在一边。我是这么想的:眼前的问题与前面的问题有点不同:OP试图以某种方式表示数字,而不是在上面进行计算。使用不带参数的
toPrecision
可以达到最初的目标,但是,我也推测他以后可能需要重新格式化。使用带有参数的
toPrecision
可以在不改变方法的情况下实现这一目标,这就是为什么避免
toString
似乎是合乎逻辑的步骤。很高兴听到这个消息!请随意将其标记为其他来这里查看的人可以接受的答案。阅读您链接的内容:如果省略了precision参数,则其行为为
Number.prototype.toString()
-这正是你正在做的。让我们把解释放在一边。我是这么想的:眼前的问题与前面的问题有点不同:OP试图以某种方式表示数字,而不是在上面进行计算。使用不带参数的
toPrecision
可以达到最初的目标,但是,我也推测他以后可能需要重新格式化。使用带有参数的
toPrecision
可以在不改变方法的情况下实现这一目标,这就是为什么避免
toString
似乎是合乎逻辑的步骤。这是非常有用的信息,我将在将来记住这一点,谢谢。然而,我不能将我的值设置为指数形式,因为我将使用values@CalebWhittington但是,我不能将我的值设置为指数形式,因为我将使用这些值进行API调用-您不会,这也可以从控制台日志中看到(您是否单击了“运行代码片段”按钮?)。你的问题实际上没有解决