共用方式為


浮點數值類型 (C# 參考)

浮點數值類型代表實數。 所有浮點數值類型都是 實值型別。 它們也是 簡單型別,你可以用 文字來初始化它們。 所有浮點數類型都支持 算術比較等號 運算符。

C# 語言參考資料記錄了 C# 語言最新版本。 同時也包含即將推出語言版本公開預覽功能的初步文件。

文件中標示了語言最近三個版本或目前公開預覽版中首次引入的任何功能。

小提示

欲查詢某功能何時首次在 C# 中引入,請參閱 C# 語言版本歷史的條目。

浮點類型的特性

C# 支援下列預先定義的浮點類型:

C# 類型/關鍵詞 近似範圍 精確度 大小 .NET 類型
float ±1.5 x 10~45 至 ±3.4 x 1038 ~6-9 位數 4 個位元組 System.Single
double ±5.0 × 10~324 至 ±1.7 × 10308 ~15-17 位數 8 個字節 System.Double
decimal ±1.0 x 10-28 至 ±7.9228 x 1028 28-29 位數 16 個字節 System.Decimal

在上表中,最左邊數據行的每個 C# 類型關鍵詞都是對應 .NET 類型的別名。 它們是可互換的。 例如,下列宣告會宣告相同類型的變數:

double a = 12.3;
System.Double b = 12.3;

每個浮點型別的預設值為零, 0。 每個浮點類型都有 MinValueMaxValue 常數,可提供該型別的最小和最大有限值。 floatdouble 型別也提供代表非數位和無限值的常數。 例如, double 型別提供下列常數: Double.NaNDouble.NegativeInfinityDouble.PositiveInfinity

decimal 所需的有效位數是由小數點右邊的位數決定時,此類型是適當的。 這類數位通常用於金融應用程式、貨幣金額(例如 1.00 美元)、利率(例如 2.625%),依此類推。 即使是精確到一個十進位數的數位,也會更準確地由decimal類型處理:例如,0.1 可以完全由decimal實例表示,而沒有doublefloat或確切表示0.1的實例。 由於數值類型有這種差異,因此當您使用 doublefloat 或 用於十進位數據時,算術計算中可能會發生非預期的四捨五入錯誤。 您可以在最佳化效能比確保精確度更重要時使用 double ,而不是 decimal 。 然而,除了計算量最高的應用程式外,任何效能差異都不會被察覺。 另一個避免 decimal 的可能原因是將記憶體需求降到最低。 例如, ML.NET 會使用 float ,因為 4 個字節和 16 個字節之間的差異會加總到非常大的數據集。 如需詳細資訊,請參閱System.Decimal

您可以在表達式中混合 整數 型別和 floatdouble 型別。 在此情況下,整數型別會隱含轉換成其中一個浮點型別,如有必要,類型 float 會隱含轉換成 double。 表達式的評估方式如下:

  • 如果表達式中存在double型態,該表達式會評估為 double,在關係比較與等式比較中會評估為 。bool
  • 若表達式中沒有double型別,該表達式會評估為 float,在關係與等式比較中則取為 。bool

您也可以在表達式中混合整數型別和 decimal 型別。 在此情況下,整數型別會隱含轉換成 decimal 型別,而表達式會評估為 decimalbool ,或在關係型和相等比較中為 。

你不能在表達式中把類型和類型floatdouble混合decimal使用。 在此情況下,如果您想要執行算術、比較或相等運算,您必須明確地將作數從 或 decimal 轉換成 類型,如下列範例所示:

double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);

您可以使用 標準數值格式字串自訂數值格式字串 來格式化浮點值。

實數常值

實數字面上的後綴決定其類型:

  • 沒有後綴或帶有 d 後綴或後 D 綴的字面是 double
  • 帶有 f or F 後綴的字面表示為 float
  • 帶有 m or M 後綴的字面表示為 decimal

以下程式碼展示了每種類型的範例:

double d = 3D;
d = 4d;
d = 3.934_001;

float f = 3_000.5F;
f = 5.4f;

decimal myMoney = 3_000.5m;
myMoney = 400.75M;

上述範例也會示範 使用 _ 做為 數位分隔符。 您可以使用數字分隔符搭配各種數字字面值。

你也可以使用科學記號法,它指定實字面值的指數部分,如下範例所示:

double d = 0.42e2;
Console.WriteLine(d);  // output 42

float f = 134.45E-2f;
Console.WriteLine(f);  // output: 1.3445

decimal m = 1.5E6m;
Console.WriteLine(m);  // output: 1500000

轉換次數

浮點數值類型之間只有一種隱含的轉換:從 到 floatdouble。 然而,你可以透過 明確的鑄造方式,將任何浮點類型轉換成其他浮點類型。 如需詳細資訊,請參閱 內建數值轉換

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格的下列幾節:

另請參閱