简体   繁体   中英

Ruby 1.8.6 BigDecimal.to_f always returns '0,0' on Solaris

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

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&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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM