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

97

有没有简洁的方法将“1,112”转换为整数1112,而不是1?

我有一个方法,但不够简洁:

"1,112".split(',').join.to_i #=> 1112
7个回答

183

这个怎么样?

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

谢谢你的回答。它比我的好多了。事实上,我希望只有一个调用而不是两个。像这样:"1,112".to_money。经过审查答案,很可能没有这样的方法。无论如何,非常感谢! - mCY
@michealKohi,你能告诉我为什么delete()比接受正则表达式的gsub快得多吗?我一直以为正则表达式的方式更快。我已经在两者上运行了基准测试,执行时间差异很大。 - Abhinay
1
@Abhinay 关于你的基准测试:样本大小?字符串大小? - Michael Kohl

6
你可能还想确保你的代码能够正确本地化,或者确保用户习惯于“国际”符号。例如,“1,112” 在不同的国家表示的数字是不同的,在德国它表示略大于一的数字,而不是一千多个。

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

4

一些更方便的内容

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

它可以使“1 200 200”正常工作。


8
更好的写法是'1,1200.00'.gsub(/[^0-9\.]/,'').to_f,该代码会将字符串中的非数字和小数点字符删除,并将结果转换为浮点数。 - Hauleth
7
等等,为什么您想把“1,1200.00”转换为“1120000”?难道您不只是想替换逗号(或者根据语言环境,点号)吗?此外,这并没有把它转换成整数或浮点数,只是一个没有分隔符的字符串。 - brymck
3
@Bryan:猜测一下,您可能想在银行应用程序中执行此操作,将用户输入的货币金额转换为整数以便在应用程序内处理:例如,将美元和美分转换为美分。这种方法将避免在处理浮点数时出现意外的舍入误差。当需要向用户显示货币金额时,可以将美分金额转换为美元和美分。(尽管这不是提问者所问的内容。) - Teemu Leisti
3
这个回答甚至没有解决提问者将字符串转换为整数或浮点数的要求。 - Mr. Lance E Sloan

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

1

我会使用 String#tr 来实现:

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

-1
String count = count.replace(",", "");

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