红宝石的1.8.6BigDecimal.to_f总是返回'0,0'on Solaris
-
19-09-2019 - |
题
我遇到了一个非常奇怪的错误。我在Solaris10,使用红宝石的企业版(红宝石的1.8.6(2008-08-08补286)[i386-solaris2.10])与轨2.3.4.我有一个非常奇怪的错误。在移民和难民委员会:
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>
一切都很好!但是,当我在轨控制台和做同样的事情,"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。很奇怪!是的,可能是一个错误,在红宝石的企业版?但是,如果是这样,为什么不让它发生与移民和难民委员会(它也是瑞版本,我双重检查).任何想法?
- 约翰内斯
解决方案
我不是专家但是我的猜测是,这种行为是一个副作用的是在德国。
显然,to_f使用的一个国有化版本的十进制分离器。我怀疑,如果你改变你的计算机的国籍设置我们,这将会改变。
编辑:
不,这有助于你的问题。但是一个小小的更多的背景信息可能:
当你这样做 123.to_f
在移民和难民委员会,你其实执行 123.to_f.to_s
(因为移民和难民委员会需要打印出你的结果)。
你可能会得到更好的服务具有明确的格式化使用的格式操作员 %
:
"%5.1f" % 123 => 123.0
编辑:
之后,一些挖掘,发现了一些真正是相关和有用的信息:
http://rubyforge.org/forum/forum.php?thread_id=32460&forum_id=723
这是一个问题,是已知的红宝石社区,但不会是"固定的",因为这样的。解决方法是提供在线程。
不隶属于 StackOverflow