views:

197

answers:

1

Hi,

I have come across a very weird error. I'm on Solaris 10, using Ruby Enterprise Edition (ruby 1.8.6 (2008-08-08 patchlevel 286) [i386-solaris2.10]) with Rails 2.3.4. I have a very weird error. In irb:

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>

Everything's fine! BUT when I fire up the Rails console and do the same thing, "to_f" always returns '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

This does not happen when I do the same thing on my Mac. Very weird! Is that possibly a bug in Ruby Enterprise Edition? But if so, why doesn't it occur with irb (which also is the REE version, I double checked). Any ideas?

  • Johannes
A: 

I'm no expert, but my guess is that this behavior is a side effect of your being in Germany.

Apparently, to_f uses a nationalized version of the decimal separator. I suspect that if you change your computer's nationality settings to US, this will change.

EDIT:

Not that this helps your problem. But a little more background info might:

When you do 123.to_f in irb, you're actually executing 123.to_f.to_s (because irb needs to print out your result).

You might be better served with explicit formatting using the format operator %:

"%5.1f" % 123 => 123.0

EDIT:

After some digging, found some truly relevant and helpful information here:

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

It's a problem that's known in the Ruby community, but will not be "fixed" as such. Workarounds are provided in the thread.

Carl Smotricz