在JavaScript中将字符串转换为整数或浮点数

5

如果我不知道变量是类似整数的数字还是类似小数的数字,有没有一种简单的方法将字符串解析为整数或浮点数?

a = '2'; // => parse to integer
b = '2.1'; // => parse to float
c = '2.0'; // => parse to float
d = 'text'; // => don't parse

编辑:看起来我的问题缺乏必要的上下文:我想进行一些计算,而不会失去原始格式(因此,原始格式意味着整数与浮点数。我不关心原始小数位数):

例子:

包含格式化数字的字符串(“2”) =>解析为数字(2.0) =>进行一些计算(2.0 + 1 = 3.0) =>恢复“原始格式”(“3”,而不是“3.0”)

如果输入为2.0,则所需结果将为“3.0”(而不是“3”)。


为什么你想要解析?JavaScript有动态类型。此外,它唯一的数值类型是double。 - david a.
@david a.:感谢你指出这一点。我之前不知道这个。但我仍然在想,既然 JavaScript 只有一种数字类型,为什么会有两个函数(parseInt、parseFloat)呢? - am2124429
1
我认为两者的区别仅在于它们如何解析输入 - parseInt()只取其整数部分,而parseFloat()也取其小数(以及指数)。但它们都返回相同类型(即实际上是浮点类型的数字)。请参见此处JS数字的规范:http://www.ecma-international.org/ecma-262/6.0/index.html#sec-terms-and-definitions-number-value。MSDN也在此处提到相同的事情:https://msdn.microsoft.com/library/7wkd9z69(v=vs.94).aspx#Anchor_4 - david a.
由于浮点数和整数之间没有区别,你只需要这样做:isNaN(val) ? val : parseFloat(val); - Mortimer
4个回答

21

将具有数字数据的字符串乘以1。您将获得数字数据值。

var int_value = "string" * 1;

在您的情况下
a = '2' * 1; // => parse to integer
b = '2.1' * 1; // => parse to float
c = '2.0' * 1; // => parse to float
d = 'text' * 1; // => don't parse    //NaN value

对于最后一个,您将获得 NaN 值。手动处理NaN值。


这也是迄今为止最快的方法,甚至比JSON.parse还要快。 - Ten Bitcomb
您还可以在前面加上一个+,例如+'2.1'会返回2.1 - Ollie

10

只需将其包在 Number() 中即可。

Number('123') === 123

Number('-123.456') === -123.456


0

这就是我最终解决它的方法。我没有找到其他解决方案,只能将变量类型添加到变量中...

var obj = {
 a: '2',
 b: '2.1',
 c: '2.0',
 d: 'text'
};
// Explicitly remember the variable type
for (key in obj) {
  var value = obj[key], type;
  if ( isNaN(value) || value === "" ) {
    type = "string";
  }
  else {
    if (value.indexOf(".") === -1) {
      type = "integer";
    }
    else {
      type = "float";
    }
    value = +value; // Convert string to number
  }
  obj[key] = {
    value: value,
    type: type
  };
}
document.write("<pre>" + JSON.stringify(obj, 0, 4) + "</pre>");


0

您可以使用:

function parse(x){
  return x==x*1?x*1:x
 }

function parse(x){
  return x==x*1?x*1:x
 }
 
 console.log(parse(1),typeof parse(1))
 console.log(parse("1"),typeof parse("1"))
 console.log(parse("1.1"),typeof parse("1.1"))
 console.log(parse("1A"),typeof parse("1A"))


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