1. 程式人生 > >C# 中的數字分隔符 _

C# 中的數字分隔符 _

編寫 C# 程式碼時,我們時常會用到很大的數字,例如下面定義的變數: ```csharp const long loops = 50000000000; ``` 您能快速讀出這是多少嗎?是不是還是會有很多人把游標定位到最後一位,然後按鍵盤上的向左鍵一個一個往上數:個、十、百、千、萬、十萬、百萬、千萬、億、十億、百億、千億…… ![reading large number](https://img2020.cnblogs.com/blog/2074831/202011/2074831-20201116020622863-863232680.png#center) 數字的這種寫法,嚴重影響了它的可讀性。所以人們才會發明了諸如千分位之類的寫法,上面的數字用千分位可以寫作 `50,000,000,000`,這樣子是不是可讀性就強多了?不過這是西方人的寫法。 如果按照我們中國人的習慣,可以寫成 `500,0000,0000`,是不是一眼就可以讀出來是*五百億*了? 那麼問題來了,我們能不能在程式碼中這麼寫來增強數字的可讀性呢? 答案是肯定的,不過要稍作改變 —— 把逗號換成下劃線 `_`: ```csharp const long loops = 500_0000_0000; // 或者 const long loops = 50_000_000_000; ``` 這是從 C# 7.0 開始支援的功能。它的用法和 Java 及 Python 中的用法是類似的。 當我們使用下劃線 `_` 作為數字分隔符時,可以把它新增在數字文字中*除了第一個字元和最後一個字元之外*的任何位置。將下劃線新增到長數字的不同的位置,就形成了不同的分組,不同的分組在不同的情景中可能會有不同的意義。比如我們在使用十進位制、十六進位制或二進位制記數法宣告數字時,可以加上下劃線 `_` 字元,使數字更易讀懂。 我們來舉個例子,定義下面一組數字: ```csharp int bin = 0b1001_1010_0001_0100;// 二進位制表示 int hex1 = 0x64_95_ED; // 十六進位制表示 int hex2 = 0x_64_95_ED; // 十六進位制表示 int dec1 = 1_000_000; // 十進位制 int dec2 = 100_0000; // 十進位制 int weird = 1_2__3___4____5_____6______7_______8________9; double real = 1_000.111_1e-5; decimal d = 1_222_345; ``` 上面的這些數字宣告編譯之後實際執行的程式碼是: ```csharp int bin = 39444; int hex1 = 6591981; int hex2 = 6591981; int dec1 = 1000000; int dec2 = 1000000; int weird = 123456789; double real = 0.010001111; decimal d = 1222345m; ``` 可以看出,雖然表示結果一樣,但是適當地添加了下劃線分隔符的寫法,大大增加了我們讀數的容易程度。 *C# 中的任意數字都可以使用下劃線分隔,兩個連續數字字元之間允許出現多個下劃線。* 但是有些時候是要注意的,比如在小數和指數中使用時,不能出現在小數點(10_.0)的前後、指數字符(1.1e_1)的前後和型別說明符(10_f)的前面,等等…… 我們來看一些錯誤的用例,下面的用法都是錯誤的: ```csharp double d1 = 1.1_e1; //不能出現在指數字符前後 float f1 = 10_f; //不能出現在型別說明符前面 double d2 = 10_.0; //不能出現在小數點前後 float pi1 = 3_.1415F; //不能出現在小數點前後 float pi2 = 3._1415F; //不能出現在小數點前後 int x1 = 52_; //不能出現在第一個字元和最後一個字元 int x2 = 0x52_; //不能出現在第一個字元和最後一個字元 int x3 = 0_x52; //不能出現在 0x 之間 ``` ## 總結 在定義較大的數字時,使用下劃線 `_` 作為分隔符,可以讓較長的數字更具可讀性。這個功能雖然很微不足道,但當你用到它的時候,易讀性會讓你的心情愉快很多,不是嗎? 下劃線分隔符 `_` 在語義上對執行沒有任何影響,因為它在編譯的時候就被編譯器忽略了。
> 作者 : 技術譯民 > 出品 : [技術譯站](https://ittranslator.cn/)