decimal (C# 參考)

decimal 關鍵字表示 128 位元的資料型別。 相較於浮點型別,decimal 型別有較高的精確度和較小的範圍,讓它非常適合財務和金融計算。 下表顯示 decimal 型別的大概範圍和精確度。

型別

大約範圍

整數位數

.NET Framework 型別

decimal

(-7.9 x 1028 至 7.9 x 1028) / (100 至 28)

28-29 位有效數字

System.Decimal

常值

如果要將數字實數常值當成 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# 語言規格。 語言規格是 C# 語法和用法的決定性來源。

請參閱

參考

C# 關鍵字

整數類資料型別表 (C# 參考)

內建型別資料表 (C# 參考)

隱含數值轉換表 (C# 參考)

明確數值轉換表 (C# 參考)

Decimal

概念

C# 程式設計手冊

標準數值格式字串

其他資源

C# 參考