將文字轉換為數字,意思就是把像「one million one」這種以英文書寫的數字詞組,還原成整數 1,000,001。但一個可靠的文字轉數字工具需要一個夥伴——一個具確定性的數字轉文字拼字器——因為輸入端的英文標準拼法在不同地區或風格指南之間並不一致。在美式英文的短級數用法中,105 寫作「one hundred five」,中間不加「and」;而英式英文則常常會加上。所以,一個能夠將英文詞組還原為整數數字的反向剖析器,只在書寫者先產出穩定的單向輸出時才能成功。最乾淨的作法,就是先用一個具確定性的拼字器把數字轉文字這個方向鎖定下來,再把同樣的標準詞組餵進你的文字轉數字管線——這正是為什麼 Number to Words Converter 會成為這些轉換工作的核心。這種做法為撰寫測試的開發者、建立無障礙標籤的編輯,以及人工核對發票的分析師,提供了一個單一真相來源,說明一個英文整數在紙本上應該長什麼樣子,並讓反向查找能從一個可預測(而非憑猜測)的詞組開始。

convert words to digits
使用美式英文拼字器將文字轉換為數字

為什麼具確定性的拼字器要放在數字前方

搜尋「convert words to digits」時,幾乎總是藏著另一個更安靜的需求:作者其實希望整數能先變成一個穩定、可列印的英文詞組,再進行其他動作。這個領域大多數的挫折,來自兩個方向之間的不對稱。從一串數字轉換到英文詞組,必須遵循文法——twenty-five 與 twenty five、one hundred five 與 one hundred and five、one million one 與 one million zero thousand one。反過來,要把一個詞組剖析回 1,000,001,就需要一個剖析器,知道它在輸入端應該接受哪一種標準形式。

先選定一個方言和一套風格指南,文字轉數字這個方向就會變成一個有限的查詢表。這就是為什麼 Number to Words Converter 是你建構任何「文字與數字」管線時最自然的錨點——它提供具確定性的數字轉文字輸出,可以直接餵回一個反向剖析器,而不會有方言漂移、漏掉連字號,或是在測試案例中間冒出意外的連接詞。同一個整數經過同一個轉換器,每次都會回傳相同的小寫詞組,所以一個斷言「這個整數會渲染成這個詞組」的測試,可以寫一次,明天仍然可信。任何花了一個衝刺(sprint)在 Debug「為什麼同一份檔案中 regex 對『ninety』半認半不認,另一份卻寫成『ninty』」的團隊,都會理解在走向反向之前先鎖定單一真相來源有多重要。

Number to Words Converter 實際涵蓋了什麼

Number to Words Converter 接受介於 minus 999,999,999,999 與 999,999,999,999 之間的整數,並回傳小寫美式英文基數拼法,整個過程都在目前的瀏覽器分頁中完成。轉換採用當代美式英文偏好的短級數:1,000 為 one thousand,1,000,000 為 one million,1,000,000,000 為 one billion。內部會將絕對值切成三個一組的群組,每個非空的群組從固定查詢表中拼出,當某個群組非空時會附加對應的短級數名稱,最後再在負數輸入前還原減號。每個操作——剖析、分組、選詞、組字串——都在瀏覽器分頁中執行,所以沒有任何輸入、中間狀態或輸出會離開這個頁面。

這個工具的文法輪廓取自 Unicode CLDR 的規則式數字格式定義,以及標準的 EF 上的英文數字參考資料,兩者都明確記載哪些基礎詞與十位數以連字號相連,以及複合數字的組成方式。實作規則是公開且穩定的:從 zero 到 nineteen 共二十個基礎詞、從 twenty 到 ninety 共八個十位數、三個級數名稱(thousand、million、billion)只在其之上的群組有內容時才會輸出,外加負數的符號字元。黃金測試涵蓋 zero、不規則的青少年數字、精確與複合的十位數、百位、千位、百萬位、一個稀疏的十億值、一個負值,以及支援的最大邊界值,所以整條管線都能根據文件記載的輪廓持續受到驗證。以 BigInt 為後盾的剖析器在建構任何整數之前,也會強制執行一個較短的長度上限,這能避免貼上一大串數字時耗用不必要的瀏覽器資源。

三個步驟取得具確定性的拼法

  1. 在輸入框中輸入一個整數,可加可不加前導的正負號。像 1,000 與 12,345,678 這種標準三位數逗號分組也接受,前導零不會影響結果。請勿貼上空格、貨幣符號、小數、分數或科學記號——這些不在支援的文法內,會在轉換前就被拒絕。
  2. 選擇 Convert to words。轉換器會將輸入正規化(去除逗號、取絕對值、去除前導零、把負零折疊成零),並顯示清理過的整數以及小寫的英文拼法。如果輸入使用了無效的分組模式(例如 1,0000 或 12,34),轉換會立即失敗,並清除先前的結果,而不會悄悄嘗試修補。
  3. 從結果面板複製拼法。同一個被接受的整數永遠會產生同一組小寫詞組,所以你可以把這個詞組貼進合約、無障礙標籤、測試固定資料或文件草稿中,並確信它與你輸入的值一致。之後編輯輸入會清除先前的拼法,因此舊的結果不會被誤認為目前最新的值。

輸入文法、級數名稱與你應該知道的風格選擇

這個轉換器的文法刻意設計得很窄,而正是這種窄度,讓它的輸出在下游的文字轉數字工作中值得信賴。以下是剖析器接受與拒絕的內容,全部直接取自記載的規則。

輸入形式接受的範例拒絕的範例正規化效果
純整數1051.05 或 1 05拼為基數整數
帶正負號的整數-105 或 +105--105符號在拼字階段還原
三位數逗號分組12,345,67812,34 或 1,0000剖析前去除逗號
含前導零的整數000420x2A忽略零,數值不變
負零-0不適用折疊為零

風格輪廓值得保持醒目,因為大多數關於英文數字的爭論,都圍繞在「and」該保留還是省略。這份記載的輪廓會省略:105 變成 one hundred five,而不是 one hundred and five。如果無法預期地混用兩種形式,會讓批次轉換更難以測試與比較,所以單一、具確定性的輪廓才是重點。百位數永遠是數字詞加上 hundred;從 twenty 到 ninety 的複合十位數會以連字號連接非零的個位數;三個一組的群組中,位於個位群組之上的,只有當所在群組有內容時,才會輸出級數名稱(thousand、million、billion)。

一個完整的範例能展示複合十位數規則如何運作。以 25 作為輸入:剖析器會去除多餘字元並檢查長度,驗證它是一個完整整數,再把絕對值切成一個三位數的群組。百位數是 0,十位數是 2,個位數是 5。十位數表把 2 對應到 twenty,個位數表把 5 對應到 five,因為個位數非零,轉換器會用連字號把它們接起來,產生 twenty-five。把輸入改成 50,個位數就是 0;「零個位數」規則會保留純粹的十位數詞組,因此結果是 fifty,而不是 fifty-zero。改成 99,相同的複合十位數路徑會把 ninety 與 nine 用連字號接成 ninety-nine,也就是在進入百位前綴之前的最大複合值。

稀疏群組規則在產品中以 1,000,001 為例記載,它會變成 one million one。絕對值切成 1 | 000 | 001,中間那個空的群組會被省略,而不是拼成「zero thousand」,級數名稱 million 會附加在第一個群組的拼法之後,最後那個群組則不帶級數。負零會被正規化回零,因為記載的輪廓只給整數 0 一種基數拼法,而剖析器在查閱任何詞組表之前,會先拒絕不支援的語法——十六進位前綴、以文字書寫的數字詞組、科學記號與貨幣符號。

從標準拼法回到數字

當數字轉文字的輸出已經鎖定,反向就會變成一個有限的查詢,而不是自由形式的文法問題。核對發票與分類帳的審閱者、以人類可讀標籤建立固定資料的測試撰寫者、以及驗證無障礙文字的編輯,都可以拿著一段具確定性的詞組,透過一個圍繞相同美式英文輪廓建構的反向剖析器,預期拿回一個單一的整數。基礎詞 zero 到 nineteen、從 twenty 到 ninety 的八個十位數,以及三個級數名稱,就是記載的詞彙表,份量小到可以手工打造一個剖析器,或讓 LLM 輔助的來回轉換指派給它,而不會在處理鏈中間冒出意外的邊界案例。

在「文字與數字」工作流程中使用 Number to Words Converter 最乾淨的方式,就是先把數字轉文字這邊統一在它身上,再透過一個匹配的反向工具,讓文字轉數字那邊鏡像地使用同一套詞彙。小數、分數、科學記號、貨幣金額、支票用語、年份讀法、電話格式的報讀,以及像英式「thousand million」或印度 lakh-crore 這種特定地區的形式,都不在記載的文法範圍內,所以落在那些範疇的內容需要不同的剖析器或人工審查,而不是這個轉換器。請把這個拼法視為格式化輔助,而非法律或財務上的主張,並在反向時搭配相關的 Words to Numbers 工具,或在需要不同進位制時使用 Number Base Converter。

延伸閱讀:Random Word Generator API Alternative: Browser-Only。