Почему в Ruby BigDecimal странным образом представляют числа? - PullRequest
1 голос
/ 21 июля 2009

Я вижу очень, ОЧЕНЬ странное поведение при запуске определенных отчетов:

>> p = BigDecimal.new('0.1785990254E5')
=> #<BigDecimal:b649b978,'0.1785990254E5',16(16)>
>> q = BigDecimal.new('0.76149149E4')
=> #<BigDecimal:b64968d8,'0.76149149E4',8(16)>
>> p-q
=> #<BigDecimal:b6495ab4,'0.124498764E5',16(32)>
>> p.to_s
=> "17859.90254"
>> q.to_s
=> "7614.9149"
>> (p-q).to_s
=> "10244.98764"

Если вы заметили, p.to_s и представление BigDecimal выглядят согласованно. То же самое с q и q.to_s. Тем не менее, p-q имеет строку, представленную как «0.1244 ...», но появляется, когда отформатирован как «10244.98 ...»

Когда я запускаю это через number_to_currency, на самом деле отображается неправильное число ($ 12 449,88), а не ожидаемое число, но ТОЛЬКО на моем боксе RHEL 4.

Ответы [ 2 ]

1 голос
/ 21 июля 2009

После просмотра версий выясняется, что я запускаю Ruby 1.8.5 на коробке RHEL и Ruby 1.8.6 на моей локальной машине. Я предполагаю, что это будет причиной проблем? Действительно странные проблемы.

Обновление: Подтверждено - обновление до 1.8.6 решило проблемы.

0 голосов
/ 21 июля 2009
>> p = BigDecimal.new('0.1785990254E5')
=> #<BigDecimal:51c9e4,'0.1785990254E5',16(16)>
>> q = BigDecimal.new('0.76149149E4')
=> #<BigDecimal:518e98,'0.76149149E4',8(16)>
>> p-q
=> #<BigDecimal:516af8,'0.1024498764E5',16(32)>
>> (p-q).to_s
=> "0.1024498764E5"

на моем скомпилированном ruby ​​1.8.7 / OSX

Похоже, что они могли исправить ошибку в библиотеке между ними - но только улучшения скорости, вероятно, являются достаточно хорошей причиной для обновления (я чувствую, что вы застряли, поддерживая приложение без возможности обновления)

Я немного запутался, почему вы пытаетесь отобразить 0.1024498764E5 в качестве валюты.

...