decimal (C# 參考)
更新:2007 年 11 月
decimal 關鍵字表示 128 位元的資料型別。相較於浮點型別,decimal 型別有較高的精確度和較小的範圍,讓它非常適合財務和金融計算。下表顯示 decimal 型別的大概範圍和精確度。
型別 |
大約範圍 |
精確度 |
.NET Framework 型別 |
---|---|---|---|
decimal |
±1.0 × 10-28 至 ±7.9 × 1028 |
28-29 位有效數字 |
常值
如果要將數字實數常值當成 decimal 處理,請使用後置字元 m 或 M,例如:
decimal myMoney = 300.5m;
如果沒有後置字元 m,數字會被視為 double 處理,因而產生編譯器 (Compiler) 錯誤。
轉換
整數類資料型別 (Integral Type) 隱含轉換成 decimal,而且結果會評估為 decimal。因此您可以使用整數常值來初始化 Decimal 變數,無須後置字元,如下所示:
decimal myMoney = 300;
浮點型別和 decimal 型別之間沒有隱含轉換;因此,這兩種型別之間的轉換 (Conversion) 必須使用轉換 (Cast)。例如:
decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;
您也可以在同一個運算式裡混合使用 decimal 和數字整數型別。然而,混合使用 decimal 與浮點型別卻沒有轉換 (Cast) 會造成編譯 (Compilation) 錯誤。
如需隱含數值轉換的詳細資訊,請參閱隱含數值轉換表 (C# 參考)。
如需明確數值轉換的詳細資訊,請參閱明確數值轉換表 (C# 參考)。
格式化 Decimal 輸出
您可以使用 String.Format 方法,或透過會呼叫 String.Format() 的 Console.Write 方法格式化所得的結果。貨幣格式是使用標準貨幣格式字串 "C" 或 "c" 來指定的,如本文稍後的第二個範例所示。如需 String.Format 方法的詳細資訊,請參閱 String.Format。
範例
在這個範例中,同一個運算式裡混合了 decimal 和 int。結果會評估為 decimal 型別。
下列範例使用嘗試加入 double 和 decimal 變數的陳述式:
double x = 9;
Console.WriteLine(d + x); // Error
其結果會是下列錯誤:
Operator '+' cannot be applied to operands of type 'double' and 'decimal'
public class TestDecimal
{
static void Main()
{
decimal d = 9.1m;
int y = 3;
Console.WriteLine(d + y); // Result converted to decimal
}
}
// Output: 12.1
在這個範例裡,輸出是使用貨幣格式字串來格式化。請注意 x 被捨入是因為小數超過 $0.99。代表最大確切位數的變數 y 會以正確的格式顯示。
public class TestDecimalFormat
{
static void Main()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
/* Output:
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00
*/
C# 語言規格
如需詳細資料,請參閱 C# 語言規格中的下列章節:
1.3 型別和變數
4.1.7 decimal 型別