浮點數值型別 (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
)。 每個浮點數型別都有 MinValue
與 MaxValue
常數,提供該型別的最小與最大有限值。 float
與 double
型別也提供表示不是數字和無限值的常數。 例如,double
型別提供下列常數:Double.NaN、Double.NegativeInfinity 與 Double.PositiveInfinity。
decimal
當所需的精確度程度是由小數點右邊的數位數目所決定時,此類型就適用。 這類數位通常用於財務應用程式、貨幣金額 (例如 $1.00) 、利率 (例如 2.625%) 等等。 即使是只精確到一個十進位數的數位,類型也會更精確地 decimal
處理:例如,0.1 可以完全由 decimal
實例表示,而沒有 double
或 float
實例完全代表 0.1。 由於數數值型別的差異,因此當您使用 double
或 float
用於十進位資料時,算術計算中可能會發生非預期的四捨五入錯誤。 比起確保精確度,您可以在優化效能時使用 double
,而不是 decimal
使用 。 不過,效能上的任何差異都會被所有計算密集型應用程式所忽略。 另一個可能 decimal
避免的原因是將儲存體需求降到最低。 例如, ML.NET 會使用 float
,因為 4 個位元組與 16 個位元組之間的差異會加總非常大的資料集。 如需詳細資訊,請參閱System.Decimal。
您可以在運算式中混合 整數 型別和 float
和 double
型別。 在此情況下,整數型別會隱含轉換成其中一個浮點型別,如有必要,型 float
別會隱含轉換成 double
。 運算式評估如下:
double
如果運算式中有類型,則運算式會評估為double
,或在bool
關聯式和相等比較中評估為 。- 如果運算式中沒有
double
類型,運算式會評估為float
,或在bool
關聯式和相等比較中評估為 。
您也可以在運算式中混合整數型別和 decimal
型別。 在此情況下,整數型別會隱含轉換成 decimal
型別,而運算式會評估為 decimal
,或在 bool
關聯式和相等比較中轉換為 。
您無法在運算式中混用 decimal
型別與 float
和 double
型別。 在此情況下,如果您想要執行算術、比較或等號比較運算,則必須明確地將運算元從 或 decimal
轉換成 類型,如下列範例所示:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
您可以使用標準數值格式字串或自訂數值格式字串,設定浮點數值格式。
實際常值
實際常值的型別取決於其後綴,如下所示:
- 不含尾碼或 或
d
D
尾碼的常數值型別為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
轉換
浮點數數值型別之間只有一個隱含轉換:從 float
到 double
。 不過,您可以使用 明確轉換,將任何浮點類型轉換成任何其他浮點類型。 如需詳細資訊,請參閱 內建數值轉換。
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格的下列幾節: