專案遇上數字轉成英文的需求,例如:1234 需轉為 one thousand two hundred thirty four。
網路上有許多解決方案,程式範例、現成函式庫都有,選擇眾多之下,透過 NuGet 即裝即用才是王道。我找到一個,在 NuGet 搜尋 NUT,第一筆 Nut, Number To Text Converter & Money To Text Converter:
程式為 Open Source, 使用說明與原始碼在 Github 上: https://github.com/emrahyumuk/NUT-number-to-text。使用說明略嫌簡略,「Use the source, Luke!」 所有的疑問看完程式碼全明白了。
Nut 程式庫在 long、int 及 decimal 加了擴充方法(所以要記得 using Nut),透過 ToText() 即可數字轉英文字:
using Nut;
using System;
namespace N2T
{
class Program
{
staticvoid Main(string[] args)
{
int i = 123456;
Console.WriteLine(i.ToText("en"));
decimal n = 123456.78m;
Console.WriteLine(n.ToText(Nut.Currency.USD, "en"));
Console.Read();
}
}
}
測試結果如下:
one hundred twenty three thousand four hundred fifty six
one hundred twenty three thousand four hundred fifty six dollars seventy eight cents
轉換整數時 ToText() 可傳入語系參數轉成不同語言,程式支援英文、法文、俄文、西班牙文、土耳其文跟烏克蘭文。語系預設為英文,要轉英文不傳參數也可。含小數數字轉英文多用於表示金額,數字需用 decimal 型別,第一個參數傳入幣別決定幣值單元,例如美元是 dollar/cent、歐元是 euro/eurocent、俄羅斯是 ruble/kopek … 等,第二個參數可傳入語系。另外還有一些進階選項可設定第一個字母要不要大寫、零要不要顯示… 等,Github 原始碼附了一個 Nut.Demo 專案貼心提供選項展示及試玩。如果用得不開心,Fork 專案改成你要的樣子吧,充分體現 Open Source 精神~
愈來愈感受到 Github、NuGet 已讓程式開發產生變革,當常見需求幾乎都能快速找到現成且可修改的解決方案,排除這些瑣碎需求的牽絆,開發者更能專注核心商業邏輯,開發節奏就加快了。但負面效應也隨之而來-愈來愈短的開發時程要求、愈來愈難開口說「我做不出來」、後浪挾資訊流通之便來勢洶洶… 嗯,開發生涯好像也變幸福耶,哈!
【同場加映】阿拉伯數字轉中文大寫