Ruby BigDecimal генерирует простое число с плавающей запятой?

Я только что переключил свою версию Ruby на 1.9.2, и код BigDecimal, работающий в Ruby 1.8, больше не работает. Вот тестовый код, показывающий, что произошло

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> (BigDecimal.new("1")/BigDecimal.new("3")).to_s("F")
=> "0.33333333"
irb(main):003:0> (BigDecimal.new("1", 20)/BigDecimal.new("3", 20)).to_s("F")
=> "0.33333333"

Проблема с моей установкой Ruby? В противном случае я думаю, что даже в Ruby 1.9 приведенный выше код тестирования все еще должен работать, что здесь происходит?


person Paul L    schedule 26.09.2010    source источник
comment
В чем проблема - не показывает достаточное количество знаков после запятой?   -  person Andrew Grimm    schedule 26.09.2010
comment
Да, я пытаюсь получить больше десятичных знаков, и он может выводить только до 8 значащих цифр. Я также пытался использовать конструктор, чтобы указать, что мне нужно 20 значащих цифр, но это тоже не работает.   -  person Paul L    schedule 27.09.2010


Ответы (1)


Кажется, что изменения в Ruby 1.9 делают '/' не будут получать значащие цифры, указанные из двух операндов, которые работают в Ruby 1.8.

Приведенный выше код не будет работать, потому что два операнда для '/' будут иметь только значащие цифровые числа и сделают его числом с плавающей запятой, а число с плавающей запятой всегда будет генерировать результат с плавающей запятой с использованием метода '/'.

Вместо этого в этой ситуации я должен использовать div (значение, цифры)

(BigDecimal.new("1", 20).div(BigDecimal.new("3", 20), 50)).to_s("F")
=> "0.33333333333333333333333333333333333333333333333333"

Надеюсь, это имеет смысл.

person Paul L    schedule 28.09.2010