簡體   English   中英

紅寶石1.9.3-p194導軌3.2.9 BigDecimal to_f始終輸出0.0

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM