2014-05-07 84 views
1

我有從數據庫中獲取信息插入到列表中的代碼。我正在使用的一個數據將用於價格。 (我在SQL Server中將其類型設置爲十進制),例如:「1,80」。在C中的十進制舍入#

但是當我選擇它時,我的十進制變量返回值2!

我想知道是否有一個簡單的方法來使小數不會自動舍入數字。

這是代碼:

public decimal preco { get; set; } 

while (dr.Read()) 
{ 
    clsCaProd oProd = new clsCaProd(); 
    oProd.cod = dr.GetInt32(0); 
    oProd.preco = dr.GetDecimal(1); // Here returns "2" instead of "1,80" 
    oProd.info = dr.GetString(2); 
    oProd.categ = dr.GetString(3); 
    oProd.nome = dr.GetString(4); 

    lProd.Add(oProd); 
} 
+0

什麼是你想要執行該代碼之前,從數據庫中提取什麼樣的價值?是1.80嗎?否則,我不明白如何使用GetDecimal舍入一個數字。 – Silver

+1

當您將列類型設置爲「decimal」時,您需要指定精度和比例 - 例如'十進制(19,4)' – Blorgbeard

+0

你能提供一個運行得到這個數據行的sql的副本嗎? –

回答

0

如果聲明一個列爲decimal,默認的「規模」是零。您需要指定precision and scale

嘗試this example

declare @d1 decimal = 1.80 
declare @d2 decimal(19,4) = 1.80 

select @d1, @d2; 

結果:

2  1.8000 
+0

我已經將該列聲明爲十進制(10,2),現在它適合我! –