1

我有一个由实体框架FLOAT(126)映射到的列。Decimal它适用于写作和阅读,除了一种情况。

当我写一个高精度值时,例如:

1m / 3m = 0.33333333333333333333333333333333

我看不懂,框架抛出一个ArithmeticOverflowException.

如何解决?我的临时解决方案是在插入之前将数字四舍五入到小数点后 6 位。但是,如果我需要完整的精度怎么办?

4

1 回答 1

2

十进制仅支持 28-29 位有效数字(http://msdn.microsoft.com/en-us/library/364x0z75.aspx),并且由于 EF 不支持像 NHibernate 那样的自定义类型映射 - 它不可能加载超过该类型可以处理。

我不知道您是否会遇到这种情况,但是通过将小数转换为浮点数,您会失去精度,并且正如您所看到的那样,您最终会得到浮点数的古怪舍入。如果您追求精度并将最大有效数字设置为小数的最大值,您真的应该使用小数而不是浮点数。

于 2012-05-08T16:41:23.633 回答