【问题标题】:parseFloat() from the middle of the stringparseFloat() 从字符串中间开始
【发布时间】:2017-04-09 18:31:31
【问题描述】:

当我想从“Sometext 330”之类的字符串中“parseInt 或 parseFloat”时,我总是有一个“NaN”

Var a = "Sometext 330"
return parseFloat(a);

它会返回 "NaN" 但我需要整数或浮点数 330

【问题讨论】:

  • 当然因为第一个字符不是数字!
  • 您将不得不分解字符串并检查您无法解析该字符串的数字,因为它包含文本
  • 如果只有两个单词,第一个文本和第二个数字,然后将其拆分并只取数字一个。顺便说一句,parseFloat 是一个 JavaScript 功能,你不能改变它。

标签: javascript parseint parsefloat


【解决方案1】:

您可以先清理字符串,以便在解析数字之前只保留数字。

编辑:现在它更安全了,因为它可以接受 Number 类型而不会崩溃。

var a = "Sometext 330"

function safeParseFloat(val) {
  return parseFloat(isNaN(val) ? val.replace(/[^\d\.]+/g, '') : val)
}

function superSafeParseFloat(val) {
  if (isNaN(val)) {
    if ((val = val.match(/([0-9\.,]+\d)/g))) {
      val = val[0].replace(/[^\d\.]+/g, '')
    }
  }
  return parseFloat(val)
}

console.log(
  safeParseFloat(a),
  safeParseFloat(2000.69)
)

console.log(
  superSafeParseFloat('blah $2,000,000.69 AUD'),
  superSafeParseFloat('blah $8008 USD'),
  superSafeParseFloat('NotANumber'),
  superSafeParseFloat(8008.69),
  superSafeParseFloat('... something 500.5... test')
)

【讨论】:

  • 这对"... something 500.5... test" 这样的字符串不起作用。
  • @Annarfych 好点。我用 superSafe 版本更新了答案。虽然它在国际上并不安全
【解决方案2】:

如果您的用例始终相同,您也可以拆分字符串。

var str = "test 900";
var split = str.split(' ');
// Loop through the split array
split.forEach(function(item){
  // If the split is not NaN
  if(!isNaN(item)){
    // Heres your number
    console.log(item);
  }
});

【讨论】:

    【解决方案3】:

    更优雅的方式:

    Var a = "Sometext 330"
    return parseFloat(a.match(/\d+$/)[0]);
    

    【讨论】:

      【解决方案4】:

      如果你想让它解析浮点数/浮动,你可以使用这个正则表达式:

          var numberStr = "fea$420.69atrg";
          return parseFloat(numberStr.match(/\d+\.\d+/)[0]);
      

      这里将返回 420.69。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        相关资源
        最近更新 更多