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

bst*_*ack 7 precision nhibernate decimal

所有,

我们使用NHiberate 2.1,我们存储十进制值(汇率),例如123.1234567到7位小数

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

<property name="ExchangeRate"  not-null="true" />
Run Code Online (Sandbox Code Playgroud)

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

它没有在3.0发行说明中指定此行为更改,尽管它似乎详细说明问题[NH-1594],十进制的默认值是DECIMAL(19,5)

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

<property name="ExchangeRate"  type="decimal(10,7) not-null="true" />
Run Code Online (Sandbox Code Playgroud)

我需要知道这个解决方案是解决这个问题的正确方法吗?此外,为什么在2.1和3.0之间的舍入行为会发生功能性变化?

干杯,

比利栈

Die*_*hon 10

这是有效的,但这是更清洁的IMO:

<property name="ExchangeRate" precision="10" scale="7" />
Run Code Online (Sandbox Code Playgroud)

属性类型隐含了一个非空小数.

  • @bstack这是你可以在nhibernate开发列表中提出的问题.无论如何,确切的数字类型应该是确定性的,因此最好是显式而不是信任未记录的默认值. (2认同)