BigDecimal
初期値のようにfloatを取らないので、それを扱うコンストラクタを書いています。初期化メソッドを無視して、デフォルトのコンストラクターを呼び出しているようです。
投げるTypeError can't convert Float into String (TypeError)
メソッドformat
は機能します。
ファイル BigDecimal.rb:
require 'bigdecimal'
class BigDecimal
def initialize
if self.class == Float
super self.to_s
end
end
def format
sprintf("%.2f", self)
end
end
次に、ファイル test.rb で:
require 'BigDecimal' # => true
bd = BigDecimal.new('54.4477') # works
puts bd.format # 54.44
bd2 = BigDecimal.new(34.343) # TypeError: can't convert Float into String (TypeError)
ルビー1.9.2