[英]ruby 1.9.3-p194 rails 3.2.9 BigDecimal to_f always outputs 0.0
從上周開始,我通常使用的Rails項目就BigDecimal.to_f而言開始表現欠佳。 調用to_f時,每個BigDecimal數字都將輸出為0.0:
~/development/rails_project> rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > BigDecimal.new('5').to_f
=> 0.0
我一直在運行Ruby 1.9.3補丁程序級別194和Rails 3.2.9。 一些使用相同版本在同一項目上工作的同事沒有此問題。
還嘗試了Ruby 1.9.3補丁程序級別362的結果。 有誰遇到過同樣的問題,並且知道如何解決?
謝謝。
編輯:
我的問題不是to_s函數,而是to_f。 我可能過於簡化了,因為我的問題與number_to_currency有關:
~/development/rails_project> rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > include ActionView::Helpers::NumberHelper
=> Object
1.9.3p194 :002 > BigDecimal.new('5').to_s('F')
=> "5.0"
1.9.3p194 :003 > BigDecimal.new('5').to_s
=> "5.0"
1.9.3p194 :004 > BigDecimal.new('5').to_f
=> 0.0
1.9.3p194 :005 > number_to_currency(5)
=> "€ 0,00"
通過一些調試,我將其范圍縮小到number_with_precision
方法,更確切地說是:
rounded_number = BigDecimal.new(number.to_s).round(precision).to_f
如果輸出此行的不同部分,則會得到以下結果:
number = 5.0
number.to_s = "5.0"
precision = 2
BigDecimal.new(number.to_s) = 5.0
BigDecimal.new(number.to_s).round(precision) = 5.0
BigDecimal.new(number.to_s).round(precision).to_f = 0.0
有什么線索嗎?
只是黑暗中的一槍:這可能是Ruby / Rails控制台依賴於語言環境的格式化問題。
嘗試這個:
BigDecimal.new('5').to_s('F') # Should be "5.0"
BigDecimal.new('5').to_i # Should be 5
如果這能達到預期的結果,那么這僅僅是控制台的格式化問題。 to_f
方法實際上返回了正確的結果,但是控制台對結果調用了另一個to_s
以便將其打印出來。 在這種情況下,您也應該可以使用5.to_f
重現該問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.