0

我有以下内容:

{: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出于某种原因正在考虑使用它),.

我希望数字与字符串中的数字完全相同,而是作为数字:"Birds"=>16,414

如何做到这一点?

4

3 回答 3

2

只是一个通知:

如果我这样做 to_f 我会得到类似 16.0 的东西(正如你所看到的,Ruby 出于某种原因正在考虑将 , 作为 . )

Ruby 根本没有将,视为 a .。如果它会产生浮动将是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
于 2013-08-14T06:39:55.133 回答
1

试试下面的方法:

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

或(正如@Chris Heald建议的那样)

"19,797".delete(",").to_i
# => 19797
于 2013-08-14T05:31:00.053 回答
1

如您所见,Ruby 正在考虑将 , 作为 . 由于某些原因

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

类字符串

to_i(base=10) → 整数

返回将 str 中的前导字符解释为整数基基数(2 到 36 之间)的结果。超过有效数字末尾的无关字符将被忽略。

to_f → 浮动

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

ruby 文档是公开的。他们不是秘密。事实上,您的计算机上可能有这些文档。尝试这个:

$ ri String#to_i
于 2013-08-14T05:42:23.683 回答