Ruby 1.8.6 BigDecimal.to_f总是在Solaris上返回'0,0'

时间:2009-11-11 10:09:38

标签: ruby-on-rails ruby solaris bigdecimal ruby-enterprise-edition

我遇到了一个非常奇怪的错误。我在Solaris 10上,使用Ruby企业版(ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])和Rails 2.3.4。我有一个非常奇怪的错误。在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> 

一切都很好!但是当我启动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版本,我经过双重检查)。有什么想法吗?

  • 约翰内斯

1 个答案:

答案 0 :(得分:1)

我不是专家,但我的猜测是这种行为是你在德国的副作用。

显然,to_f使用小数分隔符的国有化版本。我怀疑,如果您将计算机的国籍设置更改为美国,则会发生变化。

修改

这并不能解决您的问题。但是更多的背景信息可能会:

当您在irb中执行123.to_f时,您实际上正在执行123.to_f.to_s(因为irb需要打印出您的结果)。

使用格式化运算符%显式格式化可能会更好:

"%5.1f" % 123 => 123.0

修改

经过一番挖掘,在这里找到了一些真正相关且有用的信息:

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

这是一个在Ruby社区中已知的问题,但不会被“修复”。线程中提供了解决方法。