将带逗号的字符串转换为整数


95

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

我有一个,但不是整齐的:

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

Answers:


175

这个怎么样?

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

感谢您的回答。比我的要好得多。实际上,我希望能打一个电话而不是两个。像:“ 1,112” .to_money。复习答案之后,很可能没有这种方法。无论如何,非常感谢!
mCY 2012年

@michealKohi你能告诉我为什么delete()比接受接受正则表达式的gsub快得多,我一直以为正则表达式的方式更快。我在两者的执行时间上都存在巨大差异时就运行了Benchmark。
Abhinay 2014年

1
@Abhinay关于您的基准:样​​本量?字串大小?
Michael Kohl 2014年

5

您可能还需要确保代码正确地本地化,或者确保用户习惯于“国际”符号。例如,“ 1,112”实际上表示不同国家/地区的数字不同。在德国,这意味着人数略多于一,而不是一千左右。

相应的Wikipedia文章位于http://en.wikipedia.org/wiki/Decimal_mark。不过,目前看来它写得不好。例如,作为一个中国人,我不确定这些关于中国千位分隔符的描述从何而来。


4

一些更方便

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

它也可以使“ 1200200”正常工作


8
更好的是'1,1200.00'.gsub(/[^0-9\.]/,'').to_f
Hauleth

7
等等,您为什么要转换"1,1200.00""1120000"?您是否只想替换,(或根据地区而定.)?此外,这不会将其转换为整数或浮点数,只是没有分隔符的字符串。
brymck

3
@Bryan:冒险一下,您可能希望在银行应用程序中执行此操作,转换用户输入的货币金额时,只处理应用程序内的整数:例如,将美元和美分转换为美分。此方法将避免在处理浮点数时可能意外出现的任何舍入错误。当需要向用户显示货币金额时,可以将分金额转换为美元和分。(尽管这不是发问者的要求。)
Teemu Leisti

2
这个答案甚至没有解决要求者将​​字符串转换为整数或浮点数的要求。
LS

2

以下是将起作用的另一种方法,尽管与其他一些方法一样,它将去除小数位。

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


1

如果有人希望用逗号代替更多内容,那么我会喜欢:

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.