2012-05-08 56 views
1

我有一個FLOAT(126)列,由Entity Framework映射到Decimal。除了一種情況外,它既適用於寫作也適用於閱讀。如何使用Entity Framework 4從Oracle數據庫讀取最大精度值?

當我寫一個高的精確度值,例如:

1m/3m = 0.33333333333333333333333333333333

我不能讀取它,該框架將引發ArithmeticOverflowException

如何解決?我的臨時解決方案是在插入它們之前將數字四捨五入到小數點後6位。但是如果我需要完整的精度呢?

回答

2

小數只支持28-29顯著數字(http://msdn.microsoft.com/en-us/library/364x0z75.aspx)和自EF不支持自定義類型映射像NHibernate的那樣 - 這是不可能放入多類型可以處理。

如果發生給你,但通過轉換爲十進制浮動你失去精度,你可以看到你結束了漂浮有古怪的圓它,我不知道。如果你是在精度之後,你應該使用十進制而不是浮點數,並且將最大有效位數設置爲十進制的最大值。

+0

好的,我刪除了38位數的部分。問題是:如果該值在插入數據庫之前是十進制的,爲什麼它不能被檢索?我想所有額外的精度在第一時間被轉換爲小數點時被移除 –

+2

它與浮點數如何表示有關。我不能給你我有頂部的一個正確的例子,但說3.8轉換並存儲到浮實際上已經實際上被存儲爲3.7999999999999999999999999直到基本上你用完顯著數字。有很多在互聯網上的浮點表示,非常詳細的解釋 - 只是谷歌的浮動,你會打很多,但都不是很容易閱讀。 –

相關問題