【问题标题】:Convert string with comma to integer将带逗号的字符串转换为整数
【发布时间】:2012-07-13 08:41:15
【问题描述】:

有没有什么巧妙的方法可以将“1,112”转换为整数 1112,而不是 1?

我有一个,但不整齐:

"1,112".split(',').join.to_i #=> 1112

【问题讨论】:

    标签: ruby integer data-conversion


    【解决方案1】:

    这个怎么样?

     "1,112".delete(',').to_i
    

    【讨论】:

    • 感谢您的回答。这比我的好多了。事实上,我希望会有一个电话而不是两个电话。比如:“1,112”.to_money。查看答案后,很可能没有这样的方法。无论如何,非常感谢!
    • @michealKohi 你能告诉我为什么 delete() 比在接受正则表达式的 gsub 中做同样的事情要快得多,我一直认为正则表达式的方式更快。我已经在两者上运行了 Benchmark,因为它在执行时间上存在巨大差异。
    • @Abhinay 关于你的基准:样​​本量?字符串大小?
    【解决方案2】:

    您可能还想确保您的代码正确本地化,或者确保用户习惯了“国际”表示法。例如,“1,112”实际上表示不同国家的不同数字。在德国,它的意思是比一多一点的数字,而不是一千之类的数字。

    相应的维基百科文章位于http://en.wikipedia.org/wiki/Decimal_mark。不过现在好像写得不好。例如作为一个中国人,我不确定这些关于中国千位分隔符的描述来自哪里。

    【讨论】:

      【解决方案3】:

      更方便一些

      "1,1200.00".gsub(/[^0-9]/,'') 
      

      它使“1 200 200”也能正常工作

      【讨论】:

      • 更好的是'1,1200.00'.gsub(/[^0-9\.]/,'').to_f
      • 等等,为什么要将"1,1200.00" 转换为"1120000"?您不只是想替换,(或者,取决于语言环境,.)吗?此外,这不会将其转换为整数或浮点数,只是一个没有分隔符的字符串。
      • @Bryan:冒险猜测一下,您可能希望在银行应用程序中执行此操作,在转换用户输入的货币金额时,以便在应用程序内仅处理整数:对于例如,将美元和美分转换为美分。此方法将避免在处理浮点数时可能意外出现的任何舍入错误。当需要向用户显示货币金额时,可以将美分金额转换为美元和美分。 (虽然这不是提问者所问的。)
      • 这个答案甚至没有解决提问者将字符串转换为整数或浮点数的请求。
      【解决方案4】:

      以下是另一种可行的方法,尽管与其他一些方法一样,它会去除小数位。

      a = 1,112
      b = a.scan(/\d+/).join().to_i => 1112
      

      【讨论】:

        【解决方案5】:

        我会使用String#tr

        "1,112".tr(',','').to_i # => 1112
        

        【讨论】:

          【解决方案6】:

          如果有人想代替逗号,我很喜欢:

          "1,200".chars.grep(/\d/).join.to_i
          

          不知道性能,但它比gsub 更灵活,即:

          "1-200".chars.grep(/\d/).join.to_i
          

          【讨论】:

            【解决方案7】:
            String count = count.replace(",", "");
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-10-27
              • 2017-11-07
              • 2011-10-27
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多