C# Challenge 21 - 在您的 C# 程式碼中選擇正確資料類型

C# Challenge 21 - 在您的 C# 程式碼中選擇正確資料類型

Microsoft 2023 年所提供的 C# codecamp 基礎課程,總共有 38 個單元,完成後就可以獲得 Certification ,今天要來跟大家分享的是第 21 單元的內容。

由於上一個單元也是類似於挑戰專案,所以我就直接略過第 20 單元的內容往下一個章節來記錄。

本節內容

實質型別和參考型別

  • 實值型別會以位元儲存,而位元即是簡易的開啟/關閉切換。 合併足夠數量的這些切換,便可讓您儲存幾乎任何可能的值。
  • 有兩種資料類型的基本分類:實值和參考型別。 其差異在於當您的程式正在執行時,電腦儲存值的方式和位置。
  • 簡單實值型別會使用關鍵字別名來表示 .NET 程式庫中類型的正式名稱。

各種資料類型的值的範圍

Input:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Console.WriteLine("Signed integral types (帶正負號):");

Console.WriteLine($"sbyte : {sbyte.MinValue} to {sbyte.MaxValue}");
Console.WriteLine($"short : {short.MinValue} to {short.MaxValue}");
Console.WriteLine($"int : {int.MinValue} to {int.MaxValue}");
Console.WriteLine($"long : {long.MinValue} to {long.MaxValue}");

Console.WriteLine("");
Console.WriteLine("Unsigned integral types (不帶正負號) :");

Console.WriteLine($"byte : {byte.MinValue} to {byte.MaxValue}");
Console.WriteLine($"ushort : {ushort.MinValue} to {ushort.MaxValue}");
Console.WriteLine($"uint : {uint.MinValue} to {uint.MaxValue}");
Console.WriteLine($"ulong : {ulong.MinValue} to {ulong.MaxValue}");

Output:

1
2
3
4
5
6
7
8
9
10
11
Signed integral types(帶正負號):
sbyte : -128 to 127
short : -32768 to 32767
int : -2147483648 to 2147483647
long : -9223372036854775808 to 9223372036854775807

Unsigned integral types(不帶正負號):
byte : 0 to 255
ushort : 0 to 65535
uint : 0 to 4294967295
ulong : 0 to 18446744073709551615

浮點數型別

範圍比較

Input:

1
2
3
4
5
Console.WriteLine("");
Console.WriteLine("Floating point types:");
Console.WriteLine($"float : {float.MinValue} to {float.MaxValue} (with ~6-9 digits of precision)");
Console.WriteLine($"double : {double.MinValue} to {double.MaxValue} (with ~15-17 digits of precision)");
Console.WriteLine($"decimal: {decimal.MinValue} to {decimal.MaxValue} (with 28-29 digits of precision)");

Output:

1
2
3
4
Floating point types:
float : -3.402823E+38 to 3.402823E+38 (with ~6-9 digits of precision)
double : -1.79769313486232E+308 to 1.79769313486232E+308 (with ~15-17 digits of precision)
decimal: -79228162514264337593543950335 to 79228162514264337593543950335 (with 28-29 digits of precision)

重點分析

  • 浮點數類型是簡易的數值資料類型,可保存小數。
  • 當為應用程式選擇正確浮點數類型時,要考慮的不只是其可保存的最大和最小值。 您也必須考慮在十進位之後能保存多少值、儲存數字的方式,以及其內部儲存裝置會對數學運算結果產生何種影響。
  • 浮點數值在數字成長到相當龐大時,有時候可使用「E 標記法」來表示。
  • 編譯器和執行階段處理 decimal 的方式,與處理 float 或 double 的方式有基本差異,尤其是在判斷數學運算所需的正確性程度時。

資料型別大致參照規則

  • int 用於大多數的整數
  • decimal 用於表示貨幣的數字
  • bool 用於 TrueFalse
  • string 用於英數值

重點整理

這邊我覺得比較重要的是 float 以及 decimal 的區別,下面是請 ChatGPT 幫我整理的判斷情境:

  • 如果需要高精確度的計算,特別是在金融或貨幣領域,則應使用 decimal
  • 如果處理的是大量數據,並且可以容忍一些精確度損失,則 float 可能更適合,因為它在計算速度方面更高效。
  • 通常情況下,對於一般科學計算,double(雙精度浮點數,64位元)是一個較好的選擇,因為它提供了合理的精確度和性能。

所以根據上述的情境我們可以比較了解在撰寫 function 時應該選擇哪一些資料型別,幫助釐清開發需求和制定規範。
那我們下次見ʘ‿ʘ


參考資料

評論