C# 數字增加千分位

要增加千分位非常簡單,只要在數字轉換為字串時帶入 N0 這個格式化字串即可:
    
int number = 123456789;
string str = number.ToString("N0");

Console.WriteLine(str); // 123,456,789
    

N 代表的是千分位符號,0 代表是沒有小數點

也就是說小數點後面想要保留兩位時可以使用 N2 :
    
int number = 123456789;
string str = number.ToString("N2");

Console.WriteLine(str); // 123,456,789.00
    

不過需要注意的是依照不同的國家會有不同的千分位表示習慣,我們可以透過指定不同的 CultureInfo 名稱來指定:
    
int number = 123456789;
string str = number.ToString("N2");

Console.WriteLine($"en-US: {number.ToString("N2", new CultureInfo("en-US"))}"); // 123,456,789.00
Console.WriteLine($"fr-FR: {number.ToString("N2", new CultureInfo("fr-FR"))}"); // 123 456 789,00
Console.WriteLine($"es-ES: {number.ToString("N2", new CultureInfo("es-ES"))}"); // 123.456.789,00
    

所以比較嚴謹的做法是手動指定 CultureInfo 名稱,避免實際部屬時結果不符合預期(除非就是要自動轉換)。

不過筆者在測試發現一個特殊的情況,在 fr-FR (法國)輸出的時候會顯示 123?456?789,00 ,原因是他不是使用一般的空格做千分位,而是使用 0xE2 0x80 0xAF (U+202F)這個窄空格,所以在筆者的終端機上無法正常顯示,但是輸出到檔案後就正常了,實際使用時需要注意。

參考資料:
Microsoft.Learn - Int32.ToString Method

留言