Ruby on rails Ruby 1.8.6 BigDecimal.to_f始终返回';0,0';在Solaris上
我遇到了一个非常奇怪的错误。我在Solaris 10上,使用Ruby Enterprise Edition(Ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])和Rails 2.3.4。我有一个很奇怪的错误。在irb中:Ruby on rails Ruby 1.8.6 BigDecimal.to_f始终返回';0,0';在Solaris上,ruby-on-rails,ruby,solaris,bigdecimal,ruby-enterprise-edition,Ruby On Rails,Ruby,Solaris,Bigdecimal,Ruby Enterprise Edition,我遇到了一个非常奇怪的错误。我在Solaris 10上,使用Ruby Enterprise Edition(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') => #<
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>
irb(main):001:0>需要“bigdecimal”
=>正确
irb(main):002:0>b=BigDecimal.new('123'))
=> #
irb(主):003:0>b.to\U.s
=>“0.123E3”
irb(主):004:0>b.to_i
=> 123
irb(主):005:0>b至
=> 123.0
irb(主要):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
>b=BigDecimal.new('123'))
=> #
>>b.to_
=> "123.0"
>>b.to_i
=> 123
>>b.to\u f
=> 0,0
当我在Mac上做同样的事情时,这种情况不会发生。很奇怪!这可能是Ruby Enterprise Edition中的一个bug吗?但是如果是这样的话,为什么irb(这也是REE版本,我仔细检查过)不会出现这种情况呢。有什么想法吗
- 约翰尼斯
- 我不是专家,但我猜这种行为是你在德国的副作用
显然,to_f使用了十进制分隔符的国有化版本。我怀疑,如果您将计算机的国籍设置更改为“我们”,这将改变
编辑:
这并不是说这有助于解决你的问题。但再多了解一些背景信息可能会:
在irb中执行
123.to\f
时,实际上是在执行123.to\f.to\s
(因为irb需要打印您的结果)
使用format操作符%
可以更好地为您提供显式格式:
%5.1f”%123=>123.0
编辑:
经过一些挖掘,在这里发现了一些真正相关和有用的信息:
这是Ruby社区中已知的一个问题,但它本身不会被“修复”。线程中提供了解决方法。我用一些信息更新了答案,这些信息应该允许您控制格式。