decimal (C# 參考)
decimal 關鍵字表示 128 位元的資料型別。 相較於浮點型別,decimal 型別有較高的精確度和較小的範圍,讓它非常適合財務和金融計算。 下表顯示 decimal 型別的大概範圍和精確度。
型別 |
大約範圍 |
精確度 |
.NET Framework 型別 |
---|---|---|---|
decimal |
(-7.9 x 1028 至 7.9 x 1028) / (100 至 28) |
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 型別。
下列範例會嘗試將 雙 和 decimal 變數會造成編譯器錯誤。
double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub);
// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);
其結果會是下列錯誤:
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# 語言規格。語言規格是 C# 語法和用法的限定來源。