2014-10-31 52 views

回答

4

有一個很好的.NET庫,名爲Humanizer,可以做到這一點。我還沒有嘗試過,但它看起來像有一個PowerShell wrapper。我懷疑這將完全符合你的需要。

0

這已被問到關於.NET/C#;你可以把它放在一個類中,並在powershell中使用Add-Type來完成這個工作。

.NET convert number to string representation (1 to one, 2 to two, etc...)

也許是這樣的(未經測試):

$class = @" 
    public class Num2Word 
    { 
     public static string NumberToText(int n) 
      { 
      if (n < 0) 
       return "Minus " + NumberToText(-n); 
      else if (n == 0) 
       return ""; 
      else if (n <= 19) 
       return new string[] {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", 
       "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", 
       "Seventeen", "Eighteen", "Nineteen"}[n-1] + " "; 
      else if (n <= 99) 
       return new string[] {"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", 
       "Eighty", "Ninety"}[n/10 - 2] + " " + NumberToText(n % 10); 
      else if (n <= 199) 
       return "One Hundred " + NumberToText(n % 100); 
      else if (n <= 999) 
       return NumberToText(n/100) + "Hundreds " + NumberToText(n % 100); 
      else if (n <= 1999) 
       return "One Thousand " + NumberToText(n % 1000); 
      else if (n <= 999999) 
       return NumberToText(n/1000) + "Thousands " + NumberToText(n % 1000); 
      else if (n <= 1999999) 
       return "One Million " + NumberToText(n % 1000000); 
      else if (n <= 999999999) 
       return NumberToText(n/1000000) + "Millions " + NumberToText(n % 1000000); 
      else if (n <= 1999999999) 
       return "One Billion " + NumberToText(n % 1000000000); 
      else 
       return NumberToText(n/1000000000) + "Billions " + NumberToText(n % 1000000000); 
     } 
    } 
@" 

Add-Type -TypeDefinition $class 

[Num2Word]::NumberToText(555) 

沒有理由你不能寫爲純PowerShell的,但是這已經寫!

相關問題