浮點數值類型代表實數。 所有浮點數值類型都是 實值型別。 它們也是 簡單的型別 ,而且可以使用 常值初始化。 所有浮點數類型都支持 算術、 比較和 等號 運算符。
浮點類型的特性
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實例表示,而沒有doublefloat或確切表示0.1的實例。 由於數值類型有這種差異,因此當您使用 doublefloat 或 用於十進位數據時,算術計算中可能會發生非預期的四捨五入錯誤。 您可以在最佳化效能比確保精確度更重要時使用 double ,而不是 decimal 。 不過,除了最密集的計算應用程式,效能上的任何差異都會不受所有影響。 另一個避免 decimal 的可能原因是將記憶體需求降到最低。 例如, ML.NET 會使用 float ,因為 4 個字節和 16 個字節之間的差異會加總到非常大的數據集。 如需詳細資訊,請參閱System.Decimal。
您可以在表達式中混合 整數 型別和 float 和 double 型別。 在此情況下,整數型別會隱含轉換成其中一個浮點型別,如有必要,類型 float 會隱含轉換成 double。 表達式的評估方式如下:
-
double如果表示式中有類型,表示式會評估為double,或在關係型和相等比較中評估為bool。 - 如果表示式中沒有
double類型,表示式會評估為float,或在關係型和相等比較中評估為bool。
您也可以在表達式中混合整數型別和 decimal 型別。 在此情況下,整數型別會隱含轉換成 decimal 型別,而表達式會評估為 decimalbool ,或在關係型和相等比較中為 。
您無法在 decimal 運算式中混合類型與 float 和 double 類型。 在此情況下,如果您想要執行算術、比較或相等運算,您必須明確地將作數從 或 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
轉換次數
浮點數值類型之間只有一個隱含轉換:從 float 到 double。 不過,您可以使用 明確轉換,將任何浮點類型轉換成任何其他浮點類型。 如需詳細資訊,請參閱 內建數值轉換。
C# 語言規格
如需詳細資訊,請參閱 C# 語言規格的下列幾節: