共用方式為


浮點數值類型 (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 ,或在關係型和相等比較中為 。

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

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

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

實數常值

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

  • 不含後置詞或 或 dD 後綴的常值的類型為 double
  • 具有 或 F 後綴的f常值的類型為float
  • 具有 或 M 後綴的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# 語言規格的下列幾節:

另請參閱