在網頁開發或應用程式製作中,經常會有將數值顯示在螢幕上的需求。
特別是在顯示金額時,通常會使用「12,345元」而非「12345元」,
這樣的3位數逗號分隔大概是較為常見的格式。
在 C# 中,當將數值轉換為字串時,我們會使用 .ToString()
方法,但在這個過程中,是否曾經對於傳遞的「格式說明符」感到困惑呢?
int price = 12345;
// 使用 "N0" 的範例
string displayA = price.ToString("N0"); // -> "12,345"
// 使用 "#,##0" 的範例
string displayB = price.ToString("#,##0"); // -> "12,345"
如果是僅限於國內的系統,兩者都無妨。
然而,在法國、德國、俄羅斯等國家中
",(逗號) 與 .(小數點) 的角色是相反的
,因此,應採用 N0 的格式。
不管使用哪一種,結果都是「12,345」。
「唉,這樣不就可以隨便嗎?」
這樣想的你,實際上這個選擇可能在未來當應用程式跨越國界時,產生很大的影響。這次,我們就來探討這個小小的格式說明符所隱藏的全球化世界。
首先,讓我們理解 "N0"
與 "#,##0"
的根本差異。
"N0"
: 標準數值格式說明符
這是「請將這個數值以數值的方式表達出來,但小數點以下的位數為0」的意義性請求。對於程式而言,可以想像成「就交給你處理吧!」。
"#,##0"
: 自訂數值格式說明符
這是「請將這個數值以『每三位加逗號,且為整數』的格式表達出來」的具體外觀指示請求。可能像是一位喜歡微管理的上司。
在日本的開發環境中,無論使用哪一種格式都會得到相同的結果,因此這個差異看起來微不足道。然而,當程式跨越海洋時,這種差異會變得明顯。
我們習以為常的符號規則,並不全球通用。
日本、美國、英國等
,
(逗號).
(小數點)12,345.67
德國、法國、義大利及其他許多歐洲國家
.
(小數點),
(逗號)12.345,67
沒錯,符號的角色完全相反。
如果德國的使用者看到基於日本常識製作的「12,345」這個顯示,可能會誤解為「12.345(十二點三四五)」。
此時,先前的 "N0"
發揮了關鍵作用。
「意義」傳遞的標準格式說明符 "N0"
可以自動讀取執行程式的電腦的文化(文化與地區設置),並以該地區最適合的格式輸出數值。
int number = 12345;
// 在日本的電腦上執行時
Console.WriteLine(number.ToString("N0"));
// 輸出: 12,345
// 在德國的電腦上執行時
Console.WriteLine(number.ToString("N0"));
// 輸出: 12.345
如此一來,我們可以在不改變任何程式碼的情況下,向各國的使用者提供自然的數值呈現。這正是使用 "N0"
的最大理由。
與其將「外觀」固定為自訂格式,不如傳遞「意義」以便靈活應對。這是在全球化應用程式開發中非常重要的觀念。
數值格式雖然看似微不足道,卻是不可忽視的關鍵。
在我們常常不經意寫下的一行代碼中,隱藏著對全球使用者的考量,以及未來擴展的設計思維。
下次當你撰寫 .ToString()
時,請務必想起這一點。那個 "N0"
的一字,可能成為你應用程式走向世界的小翅膀。
原文出處:https://qiita.com/futayubi5656/items/0a6e32308cf52855eb3f