代码之家  ›  专栏  ›  技术社区  ›  Johannes Fahrenkrug

ruby 1.8.6 bigdecimal.to_f在Solaris上始终返回“0,0”

  •  0
  • Johannes Fahrenkrug  · 技术社区  · 15 年前

    我遇到了一个非常奇怪的错误。我在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')
    => #<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上做同样的事情时,不会发生这种情况。很奇怪!这可能是RubyEnterpriseEdition中的一个bug吗?但是如果是这样的话,为什么IRB(也是REE版本)没有出现这种情况呢,我仔细检查了一下。有什么想法吗?

    • 约翰内斯
    1 回复  |  直到 15 年前
        1
  •  1
  •   Carl Smotricz    15 年前

    我不是专家,但我想这是你在德国的副作用。

    显然,to-f使用了十进制分隔符的国家化版本。我怀疑如果您将计算机的国籍设置更改为我们,这将更改。

    编辑:

    这对你的问题没有帮助。但更多的背景信息可能:

    当你这样做的时候 123.to_f 在IRB中,你实际上正在执行 123.to_f.to_s (因为IRB需要打印出你的结果)。

    使用格式操作符,您可以更好地使用显式格式。 % :

    "%5.1f" % 123 => 123.0

    编辑:

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

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

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