1

Entity Framework によってFLOAT(126)マップされた列があります。Decimal1 つのケースを除いて、書き込みと読み取りの両方で機能します。

次のような高精度の値を書き込む場合:

1m / 3m = 0.33333333333333333333333333333333

私はそれを読むことができません.フレームワークはArithmeticOverflowException.

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

4

1 に答える 1

2

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

それがあなたに起こるかどうかはわかりませんが、小数を浮動小数点数に変換することによって精度が失われ、ご覧のとおり、浮動小数点数のような風変わりな丸めが発生します。精度を求めている場合は、実際にはfloatではなくdecimalを使用し、有効数字の最大値を10進数の最大値に設定する必要があります。

于 2012-05-08T16:41:23.633 に答える