2012-05-08 5 views
1

私は、Entity FrameworkによってDecimalにマップされたFLOAT(126)列を持っています。 1つのケースを除いて、書き込みと読み取りの両方で機能します。Entity Framework 4を使用してOracleデータベースから最大精度値を読み取る方法は?

Iのような高精度の値を書き込む場合:私はそれを読むことができない

1m/3m = 0.33333333333333333333333333333333

を、フレームワークはArithmeticOverflowExceptionをスロー。

どのように解決するには?私の一時的な解決策は、数字を小数点以下6桁に丸めてから挿入することです。しかし、完全精度が必要な場合はどうすればよいでしょうか?

答えて

2

10進数は28-29桁の有効数字(http://msdn.microsoft.com/en-us/library/364x0z75.aspx)しかサポートしていないため、EFはNHibernateのようなカスタムタイプマッピングをサポートしていないため、タイプ以上のデータをロードすることはできません。

小文字を浮動小数点に変換することで精度が失われていることがわかります。浮動小数点数の丸めになります。精度の後で最大有効桁数を10進数の最大値に設定する場合は、実際にはfloatではなくdecimalを使用する必要があります。

+0

さて、私は38桁の部分を削除しました。問題は、値がデータベースに挿入される前のDecimalであった場合、それを取得できない理由は何ですか?私は余分な精度が最初に小数点にキャストされたときに削除されたと思います。 –

+2

浮動小数点数の表現方法と関係があります。私はあなたに私の持っていたトップの正しい例を与えることはできませんが、3.8を変換してフロートに格納するのは、基本的には有効数字が足りなくなるまで実際に3.7999999999999999999999999として保存する必要があります。インターネット上のフロート表現については、非常に詳細な説明がたくさんあります。フロートのためのGoogleだけで、多くのヒットがありますが、読むのは簡単ではありません。 –

関連する問題