2

我有一个存储为字符串的数字,例如"2,65424.00"有没有办法将其转换为浮点数2,65424.00并保持格式?

4

3 回答 3

2

不,内部表示不能像这样改变。解决此问题的唯一方法是为and编写to_s方法。例如:FloatFixnum

class Float
  def to_s
    # your formatting: sprintf("...", self)
  end
end

由于您想在 Fixnum 上获得相同的表示,因此您可以将 Fixnum 转换为 Float,然后将该to_s方法基于to_sFloat 的方法。

class Fixnum
  def to_s
     self.to_f.to_s
  end
end

这样,您可以通过调用to_sFloat获得表示

265424.to_s
=> "2,65424.00"

,或者当您使用插值时:

 "When you write it like this #{265424}"
 => "When you write it like this 2,65424.00"

在我看来,这是正确的方法,因为您需要单独表示您的数字。这很好,但是这个单独的表示应该在字符串级别实现,因为如果你想通过形成很好地显示一些东西,那就是字符串的用途。

此外,使用这种猴子修补方法可能会有问题,这取决于您是否要提供库等。如果您只是设计一个专用的格式方法来获取数字并将它们格式化打印出来,也许会很好。

于 2013-09-02T07:51:38.640 回答
1
You can not save float value with ',' as a delimiter in mysql

但是,您可以执行以下操作

"2,65424.00".gsub(',', '').to_f # 265424.0
于 2013-09-02T07:52:15.293 回答
0

尝试将您的字符串对象转换string.to_i为整数或string.to_f浮点数。

于 2013-09-02T07:50:39.767 回答