将字符串转换为数字(与其中表示的完全相同)?

时间:2013-08-14 05:28:42

标签: ruby

我有以下内容:

{:department=>{"Pet Supplies"=>{"Birds"=>"16,414", "Cats"=>"243,384",
"Dogs"=>"512,186", "Fish & Aquatic Pets"=>"47,018",
"Horses"=>"14,749", "Insects"=>"359", "Reptiles &
Amphibians"=>"5,794", "Small Animals"=>"19,797"}}}

现在如果我使用to_i我会说16.如果我to_f我得到类似16.0的东西(正如你所看到的,Ruby正在考虑将,视为{{1}由于某种原因)。

我希望数字与字符串完全相同,而不是数字:.

如何做到这一点?

3 个答案:

答案 0 :(得分:2)

只是一个通知:

  

如果我这样做__f我得到类似16.0的东西(正如你可以看到Ruby正在考虑,因为某种原因)。

Ruby根本没有将,视为.。如果它产生的浮点数将是16.414而不是16.0。 Ruby只是注意到无关的字符并决定忽略,414

  

如何做到这一点?

如果您希望将16,414转换为16414,那么没有什么比删除字符更简单了:

str = '16,414'
str.delete(',').to_i
# => 16414

在某些文化中,,被视为浮点数。在这种情况下,如果您想要返回16.414,则可以将,转换为.并转换为Float

str = '16,414'
str.gsub(/,/, '.').to_f
# => 16.414

答案 1 :(得分:1)

尝试以下内容:

"16,414".gsub(",","_").to_i
# => 16414

或(建议 @Chris Heald

"19,797".delete(",").to_i
# => 19797

答案 2 :(得分:1)

  

正如你所看到的,Ruby正在考虑将其作为一个。由于某种原因

是的,这一切都让人很困惑:

  

class String

     

to_i(base = 10)→整数

     

返回将str中的前导字符解释为的结果   整数基数(2到36之间)。过去的外来人物   有效数字的结尾将被忽略。

     

to_f→float

     

返回将str中的前导字符解释为a的结果   浮点数。超出有效的结尾的无关字符   数字被忽略。

ruby​​文档是公开的。他们不是秘密。实际上,您可能在计算机上安装了文档。试试这个:

$ ri String#to_i