0

Я столкнулся с очень странной ошибкой. Я на Solaris 10, используя Ruby Enterprise Edition (ruby 1.8.6 (2008-08-08 patchlevel 286) [i386-solaris2.10]) с Rails 2.3.4. У меня очень странная ошибка. В irb:Ruby 1.8.6 BigDecimal.to_f всегда возвращает «0,0» на Solaris

irb(main):001:0> require 'bigdecimal' 
=> true 
irb(main):002:0> b = BigDecimal.new('123') 
=> #<BigDecimal:834d0e8,'0.123E3',4(8)> 
irb(main):003:0> b.to_s 
=> "0.123E3" 
irb(main):004:0> b.to_i 
=> 123 
irb(main):005:0> b.to_f 
=> 123.0 
irb(main):006:0> 

Все в порядке! НО, когда я запускаю консоль Rails и делаю то же самое, «to_f» всегда возвращает «0,0».

>> b = BigDecimal.new('123') 
=> #<BigDecimal:9e80e14,'0.123E3',4(8)> 
>> b.to_s 
=> "123.0" 
>> b.to_i 
=> 123 
>> b.to_f 
=> 0,0 

Этого не происходит, когда я делаю то же самое на своем Mac. Очень странно! Возможно, это ошибка в Ruby Enterprise Edition? Но если это так, то почему это не происходит с irb (который также является версией REE, я дважды проверял). Есть идеи?

  • Johannes
+0

Я обновил свой ответ с некоторой информацией, которая должна позволить вам взять под контроль форматирование. –

ответ

1

Я не специалист, но мне кажется, что такое поведение является побочным эффектом вашего существа в Германии.

По-видимому, to_f использует национализированную версию десятичного разделителя. Я подозреваю, что если вы измените настройки национальности вашего компьютера в США, это изменится.

EDIT:

Не то, что это поможет вашей проблемы. Но немного больше дополнительной информации может быть:

Когда вы делаете 123.to_f в irb, вы фактически выполняете 123.to_f.to_s (потому что irb должен распечатать ваш результат).

Вы могли бы лучше с явным форматированием с помощью оператора формата %:

"%5.1f" % 123 => 123.0

EDIT:

После некоторого копания, нашел действительно актуальную и полезную информацию здесь:

http://rubyforge.org/forum/forum.php?thread_id=32460&forum_id=723

Это проблема, которая известна в сообществе Ruby, но не будет «исправлена» как таковая. Временные решения предусмотрены в потоке.

Смежные вопросы