我有一个FLOAT(126)
列,由实体框架映射到Decimal
。除了一种情况外,它适用于写作和阅读。
当我写一个高精度值时,例如:
1m / 3m = 0.33333333333333333333333333333333
我无法阅读它,框架会抛出ArithmeticOverflowException
。
如何解决?我的临时解决方案是在插入之前将数字四舍五入到小数点后6位。但是,如果我需要完全精确度呢?
答案 0 :(得分:2)
十进制仅支持28-29个有效数字(http://msdn.microsoft.com/en-us/library/364x0z75.aspx),并且因为EF不支持像NHibernate那样的自定义类型映射 - 所以不能加载超过类型可以处理的数量。
我不知道你是否会发生这种情况,但是通过将小数转换为浮点数,你会失去精确度,而且你可以看到你最终得到了漂浮物所具有的古怪舍入。如果你在精度之后,你真的应该使用十进制而不是浮点数,并且还将最大有效数字设置为十进制的最大值。