【问题标题】:Ruby 1.8.6 BigDecimal.to_f always returns '0,0' on SolarisRuby 1.8.6 BigDecimal.to_f 在 Solaris 上总是返回 '0,0'
【发布时间】:2010-12-15 09:57:53
【问题描述】:

我遇到了一个非常奇怪的错误。我在 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 上做同样的事情时,这不会发生。很奇怪!这可能是 Ruby 企业版中的错误吗?但如果是这样,为什么 irb 不会发生(这也是 REE 版本,我仔细检查了)。有什么想法吗?

  • 约翰内斯

【问题讨论】:

  • 我已经用一些信息更新了我的答案,这些信息应该允许您控制格式。

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


【解决方案1】:

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

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

编辑:

并不是说这对您的问题有帮助。但是更多的背景信息可能会:

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

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

"%5.1f" % 123 =&gt; 123.0

编辑:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2014-01-24
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多