Ruby BigDecimal генерирует число с плавающей точкой? - PullRequest
1 голос
/ 26 сентября 2010

Я только что переключил свою версию 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 вышеописанный код все еще должен работать, что здесь происходит?

1 Ответ

2 голосов
/ 28 сентября 2010

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

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

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

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

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

...