2012-08-05 66 views
0

當救了我的經度和緯度在我的Rails應用程序3.2,該值的越來越截斷保存。Float值被截斷的回報率3.2

我試着在控制檯,它的保存完整的價值:

item.update_attributes(:latitude => '51.07763839854951') 

item.latitude: 

=> 51.07763839854951 

在瀏覽器中保存相同的值給我的輸出:

51.0865174 

我能做些什麼防止這個?

+0

而是在控制檯做'item.latitude'做'項目。 reload.latitude';這會給你一個不同的結果嗎? – 2012-08-05 14:54:25

+0

如下所示更改爲小數點 - 稍後可能會發揮作用。它仍然有點奇怪。 – simonmorley 2012-08-05 17:33:36

+0

將DB字段更改爲小數字段後,它是否仍然截斷值?請張貼你現在得到的結果。 – 2012-08-06 07:03:24

回答

1

當它被存儲在數據庫中的值可能被截斷。無論確切原因的,如果該值是精確的,並且需要被存儲和檢索的無損,一個浮點數可能是使用錯誤的數據類型。當你對它們執行某些算術運算時,浮點數會失去精度,所以它們不適用於必須精確的值。

當您使用Rails遷移定義你的數據庫架構,您可以使用:decimal類型必須精確地存儲十進制值。 (當ActiveRecord的翻出這些值了DB的,他們將成爲BigDecimal對象,而不是Float是你能在BigDecimal就做算術不失精確。)