2013-07-23 86 views
1

我有一個應用程序使用nhibernate和流利-Nhibernate。我們正在使用SQL Server 2008,並且我有一個浮點列表,因爲我們沒有固定的精度,用戶可以設置任意數量的小數位(1,10,25小數位等)。我使用映射流利,NHibernate的這個樣子:用NHibernate映射Float

Map(x => x.Factor).Column("FACTOR").Not.Nullable(); 

而且我也試過:

Map(x => x.Factor).Column("FACTOR").Precision(53).Not.Nullable(); 

這:

Map(x => x.Factor).Column("FACTOR").CustomSqlType("float").Not.Nullable(); 

,它不工作。你看我的數據庫截圖:

enter image description here

領域的因素是我浮欄,最後的註冊表已經數1,234567891當NHibernate的命中數據庫的查詢時,談到在C#與1,123456788,在C#中四捨五入價值。我們需要原始價值。

我該如何得到它的工作?

+0

你的db列定義? – giammin

+0

我在sql server上的列是'float'。 –

+0

Map(x => x.Factor).Column(「FACTOR」)。Scale(53).Precision(54).CustomSqlType(「float」)。Not.Nullable(); – giammin

回答

1

是的,在數據​​庫中使用小數點後,浮點數會遇到rounding問題。 也在域類中使用小數,因爲float/double都受到相同舍入問題的影響。

要映射使用:

Map(x => x.Factor).Column("FACTOR").CustomSqlType("decimal(p,s)").Not.Nullable(); 

這應該翻譯成decimal in sql server

+0

Alex,感謝awnser,但是,我怎樣才能配置'Precision'和'Scale'以獲得最大的小數?我的意思是,最大的整數和小數的位數 –

+0

通過改變(p,s),p是小數的總長度(以數字表示),s是小數位數,但這個映射將是永久的 - 因爲它應該 - 它是數據庫模式!不應該在完成的應用程序中經常更改nt在每一行都有任意的精度,這不是SQL標準在我看來提供的,你可以將這個值編碼成一個比特流並存儲一個字節[]。但後來,祝你好運查詢:) –

+0

謝謝亞歷克斯,你知道嗎,我可以在Oracle數據庫中創建什麼列類型以使其工作。在sql服務器中,我用'decimal(29,14)'和oracle解決?我用'數字(29,14)'嘗試過,但不起作用! –