🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

前言

在網頁開發或應用程式製作中,經常會有將數值顯示在螢幕上的需求。
特別是在顯示金額時,通常會使用「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(十二點三四五)」。

image.png

「N0」的驚人適應能力

此時,先前的 "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


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝19   💬9   ❤️5
732
🥈
我愛JS
📝4   💬14   ❤️7
251
🥉
御魂
💬1  
3
#5
2
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付