2013-07-10 3 views
1

Как-то я не могу найти ответ на это с помощью Google или SO ...Дисплей BigDecimal произвольному Precision

Рассмотрим:

require 'bigdecimal' 

puts (BigDecimal.new(1)/BigDecimal.new(3)).to_s 

#=> 0.333333333333333333E0 

Я хочу, возможность указать точность 100 или 200 или 1000, которые будут печатать «0». затем следуют 100 три, 200 тройки или 1000 тройки соответственно.

Как это сделать? Ответ должен также работать на неповторяющиеся десятичные знаки, и в этом случае дополнительные цифры точности будут заполнены нулями.

Спасибо!

ответ

5

Я думаю, проблема в том, что объекты BigDecimal не имеют своей точности, установленной на достаточно высокое значение. Я могу получить напечатанный в 1000 дробных цифр, если я явно указать требуемую точность операции с использованием div вместо /:

require 'bigdecimal' 

puts (BigDecimal.new(1).div(BigDecimal.new(3), 1000)).to_s 

#=> 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333E0 

После этого, вы можете ограничить количество дробных цифр с round.