1

我完全不熟悉rails,並且對於我的數據庫中的一些十進制值有點問題,顯示爲在默認腳手架index/show輸出中略微偏離了一小部分瀏覽器。我有一個項目,其中一個屬性的特定值是9.12,我可以確認它是正確存儲在我的sqlite3數據庫中的一個小數。然而,在索引頁面或項目的顯示頁面上,它給了我9.119999999999999小數值顯示不正確

更令人困惑的是,如果我嘗試編輯項目,表單將在相關字段中顯示9.12的精確值。

通過玩弄一下我可以看到其他值(例如9.11,9.13,9.14,9.323)會在html輸出中給我類似的精度錯誤,而許多其他值(例如9.1,9.09,9.15,9.121)將顯示他們應該。

現在我意識到這種行爲是因爲使用浮點值的方式,因爲它們以二進制存儲的方式,但我的理解是,小數不應該有任何這樣的怪癖與精度。如果這是真的,那麼我只能假設問題在於Rails。那麼任何人都可以啓發我導致這種行爲的原因?

很顯然,我可以更新我的看法,使之正常顯示,像這樣:

<%= number_with_precision(item.value, precision: 2) %> 

,但考慮到我在數據庫中播種每件商品都有十進制值過多,所有的顯示就好了,我當問題似乎是例外而不是規則時,不希望對每個十進制值進行此操作。

我使用Rails 4.0.0beta1與Ruby 2.0.0的方式(爲了跟隨最新版本的敏捷Web開發與Rails書)。如果同樣的事情發生在Rails的3.2我很想知道

編輯:具有諷刺意味的一切都顯示正確,如果我更新使用float類型,而不是數據庫。

+0

「十進制不應該有什麼這樣的怪癖與精度「爲什麼? – sawa

+0

這是我從[這裏]得到的印象(http://stackoverflow.com/questions/8514167/float-vs-decimal-in-activerecord)以及有關該主題的其他鏈接。 – Inkling

回答

0

我很久以前問過這個問題,但如果我沒有記錯,這只是在Rails中的beta版中的錯誤,並表現爲預期的最終版本的Rails 4

0

我不認爲在大多數情況下小數的處理方式與浮點數不同 - 我懷疑你會發現它們的行爲有顯着差異。