【问题标题】:Evaluating numbers that include thousand separators评估包含千位分隔符的数字
【发布时间】:2014-03-16 22:04:26
【问题描述】:

我知道,如果 parseFloat 函数遇到除数字字符(0-9+-. 和指数)以外的任何字符,它只会计算直到该字符的数字,而丢弃其他任何字符。

我遇到了一个问题,我需要能够验证带有千位分隔符的数字,如下所示:

var number = "10,000.01"; //passes
var numberWithoutThousand = "10000.01"; //fails

//i.e:
if(parseFloat(number) <= 10000) {
     return true;   
} 
//passess

问题是上述代码在技术上大于 10,000 时返回 true。

解决此问题的最佳方法是什么?我考虑在测试数字之前去掉逗号,但不确定这是一个好策略。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    你没有数字,你有字符串,所以删除逗号就是要走的路

    number = number.replace(/\,/g, '');
    

    【讨论】:

      【解决方案2】:

      您的“去掉逗号”策略对我来说似乎不错。

      if ( parseFloat( number.replace(",","") ) ) { etc(); } 
      

      【讨论】:

      • 别忘了",,".replace(",", ""); // ",",你需要一个全局标志。
      • @PaulS,你能解释一下为什么需要这样做吗?
      • @MikeRifgin 需要 'g' 来告诉 replace 全局 进行替换,而不是仅仅进行一次替换。你可能有一个数字:100,000,000.01
      【解决方案3】:

      正如建议的那样,要在数字中包含,,它必须是一个字符串,因此请进行搜索和替换。如果您必须定期执行此操作,请让自己成为可重用的函数。

      Javascript

      function myParseFloat(value) {
          if (typeof value === 'string') {
              value = value.replace(/,/g, '');
          }
      
          return parseFloat(value);
      }
      
      var number1 = "10,000.01",
          number2 = "10000.01",
          number3 = 10000.01;
      
      console.log(myParseFloat(number1), myParseFloat(number2), myParseFloat(number3));
      

      输出

      10000.01 10000.01 10000.01

      开启jsFiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多