2016-11-29 23 views
0

指定在C#十進制精度,decimal型「記住」原來的號碼的精度:SQL:由用戶

decimal.Parse("090,12300").ToString() == "90,12300" 
decimal.Parse("090,123").ToString() == "90,123" 
decimal.Parse("090,0").ToString() == "90,0" 
decimal.Parse("90").ToString() == "90" 

出於商業考慮,(*),這個精度對我們來說是很重要的,所以我們要在數據庫(SqlServer)中堅持這一點。是否有一個與c#decimal相同的SQL數據類型(除了varchar)?

(*)用戶希望看到在應用程序中輸入的確切數字。例如:有些尺度比其他尺度更精確。這意味着在這種情況下,12.5有另一種意思而不是12.50。

+1

就值而言,第一位和第二位小數與第三位和第四位小數完全相同。您可以根據需要在小數點末尾附加多個0,但值不會更改。你還想堅持0的原因是什麼?分隔符之後的可能位置總數是'scale'(不是精度,它是包含比例的位數的總數),在Sql Server中爲列指定。請參閱[十進制和數字](https://msdn.microsoft.com/en-us/library/ms187746.aspx)。 – Igor

+0

澄清我的情況。 – Lodewijk

+2

varchar是唯一可以執行此操作的數據類型。數字/小數類型(它們是相同的)不會保留輸入的小數位數。另一種選擇是將值保存爲十進制/數字,併爲精度設置另一列。 –

回答

1

使用兩列,一列用於數值本身,另一列用於點數後的數字。

你需要的是一個函數,將你的值格式化爲字符串,填充零直到有足夠數量的數字。

+0

由於我們使用的是NHibernate,我們最終使用了一個自定義的UserType,它將一個'''decimal'''.net類型轉換爲數據庫中的兩列。 – Lodewijk