我遇到了一个非常奇怪的错误。我在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版本,我经过双重检查)。有什么想法吗?
答案 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社区中已知的问题,但不会被“修复”。线程中提供了解决方法。