Рубиновый большой десятичный с двумя числами после десятичной точки

Я этот код:

require 'bigdecimal'
a = BigDecimal.new(1, 2)

Хотя мы можем иметь эти значения:

a.to_s #=> "0.1E1"
a.to_f #=> 1.0

Я бы предпочел получить это: a.to_string # => "1.00"

Знаете ли вы, может ли Ruby BigDecimal сделать это без необходимости создания дополнительного метода #to_string?

Если нет, то каким было бы наилучшее решение иметь большое десятичное число с двумя всегда после десятичной точки?

2 ответа

Решение

Может, но это своего рода формат вывода.

sprintf( "%.02f", a)
# => "1.00"

Вы можете определить метод следующим образом:

class BigDecimal
  def to_string
    sprintf( "%.02f", self)
  end
end

a.to_string
=> "1.00"

Как предлагает @CarySwoveland, вы также можете написать так

sprintf( "%.02f" % a)
sprintf( "%.02f %.02f %.02f" % [a, b, c])

Если вам не нужно определять масштаб, вы можете использовать:

a.to_s('F') #=> "1.0"

В противном случае вам нужно будет использовать sprintf и укажите масштаб:

sprintf('%.02f', a) #=> "1.00"

Другие вопросы по тегам