浮點數值型別 (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使用 的原因,是因為4個位元組和16個位元組之間的差異會增加至非常大型的資料集。 如需詳細資訊,請參閱System.Decimal

您可以在運算式中混合 整數 類資料類型和 double 類型。 在此情況下,整數類資料型別會隱含地轉換成其中一個浮點數型別,而且在必要 float 時,型別會隱含地轉換 double 成。 運算式評估如下:

  • 如果運算式中有型別,則運算式會 double 評估為 double ,或 bool 在關聯式和相等比較中。
  • 如果運算式中沒有型別,則運算式會 double 評估為 float ,或 bool 在關聯式和相等比較中。

您也可以在運算式中混合整數類資料類型和 decimal 類型。 在此情況下,整數類資料型別會隱含地轉換 decimal 成類型,而運算式會評估為 decimal ,或 bool 在關聯式和相等比較中。

您不能在運算式中混合 decimal 使用 floatdouble 類型的類型。 在此情況下,如果您想要執行算術、比較或等號比較運算,您必須明確地將運算元從或轉換為 decimal 類型,如下列範例所示:

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

您可以使用標準數值格式字串自訂數值格式字串,設定浮點數值格式。

實際常值

實際常值的類型取決於其後置詞,如下所示:

  • 不含尾碼的常值或具有 dD 後置字元的類型為 double
  • 具有 fF 尾碼的常值為類型 float
  • 具有 mM 尾碼的常值為類型 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;

上述範例也會示範如何使用 _ 做為 _,從 c # 7.0 開始支援。 您可以使用數位分隔符號搭配所有種類的數值常值。

您也可以使用科學記號標記法,也就是指定實數常值的指數部分,如下列範例所示:

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# 語言規格的下列幾節:

另請參閱