0

我遇到了一個非常奇怪的錯誤。我在Solaris 10上使用Ruby Enterprise Edition(ruby 1.8.6(2008-08-08 patchlevel 286)[i386-solaris2.10])和Rails 2.3.4。我有一個非常奇怪的錯誤。在irb中:Ruby 1.8.6 BigDecimal.to_f在Solaris上始終返回「0,0」

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版本,我再次檢查)。有任何想法嗎?

  • 約翰內斯
+0

我已經更新了我的答案,並提供了一些信息,以便您掌握格式。 – 2009-11-11 10:31:04

回答

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社區已知的問題,但不會像這樣「固定」。線程中提供瞭解決方法。