NHibernate 3.0将小数点四舍五入到小数点后5位-为什么?

NHibernate 3.0将小数点四舍五入到小数点后5位-为什么?,nhibernate,decimal,precision,Nhibernate,Decimal,Precision,全部, 我们使用的是NHiberate 2.1,我们在其中存储十进制值(汇率),例如123.1234567到小数点后7位 我们正在使用默认映射样式映射类型: <property name="ExchangeRate" not-null="true" /> 但是,当我们升级到NHibernate 3.0时,上面的值保存为123.1234500 它没有在3.0发行说明中指定这种行为变化,尽管它似乎在[NH-1594]中详细说明了十进制的默认值是十进制(19,5) 我们有一个解决方

全部,

我们使用的是NHiberate 2.1,我们在其中存储十进制值(汇率),例如123.1234567到小数点后7位

我们正在使用默认映射样式映射类型:

<property name="ExchangeRate"  not-null="true" />

但是,当我们升级到NHibernate 3.0时,上面的值保存为123.1234500

它没有在3.0发行说明中指定这种行为变化,尽管它似乎在[NH-1594]中详细说明了十进制的默认值是十进制(19,5)

我们有一个解决方案,即指定以下映射:

<property name="ExchangeRate"  type="decimal(10,7) not-null="true" />

这是可行的,但在我看来这是更干净的:

<property name="ExchangeRate" precision="10" scale="7" />


属性类型暗示非空小数。

如果必须指定只能在列标记上设置的默认值,则此解决方案将无法正常工作

<property name="Price" precision="25" scale="8" not-null="true">
  <column name="Price" default="1"/>
</property>

必须将所有内容移动到列标记才能使其工作

<property name="Price">
  <column name="Price" default="1" precision="25" scale="8" not-null="true"/>
</property>


您确定这不是因为数据库设计吗?您在尝试3.0时是否使用相同的数据库架构?对不起,应该是type=“decimal(14,7)是的,完全相同的数据库设计。如果我回到旧版本的NHibernate,这个问题就不存在了。老实说,我更喜欢另一种方式。不过,谢谢你的建议。我的问题是,为什么NH3默认四舍五入到小数点后5位,而NH2.1却没有这样做…@bstack这是你可以回答的问题询问nhibernate开发列表。无论如何,确切的数字类型应该是确定的,因此最好是显式的,而不是信任未记录的默认值。如果有人使用fluent nhibernate映射(x=>x.DecimalProperty)。比例(7)