2017-05-15 6 views
0

10進数をテキスト形式に変換するasp.netに関数を記述しました。小数点以下を除いて、ITは正しく機能します。どんなに早い助けでも高く評価されます。以下は私のコードスニペットに:10進数をasp.netのテキストに変更する

public partial class _Default : System.Web.UI.Page 
 
    { 
 
     protected void Page_Load(object sender, EventArgs e) 
 
     { 
 
      lbl_num.Text = ""; 
 
      string amt = "80434.08"; 
 
      decimal num = Convert.ToDecimal(amt); 
 
      lbl_num.Text = SpellDecimal(num); 
 
     } 
 

 

 

 
     public static string SpellDecimal(decimal number) 
 
     { 
 
      string[] digit = 
 
       { 
 
        "", "one", "two", "three", "four", "five", "six", 
 
        "seven", "eight", "nine", "ten", "eleven", "twelve", 
 
        "thirteen", "fourteen", "fifteen", "sixteen", 
 
        "seventeen", "eighteen", "nineteen" 
 
       }; 
 

 
      string[] baseten = 
 
       { 
 
        "", "", "twenty", "thirty", "fourty", "fifty", 
 
        "sixty", "seventy", "eighty", "ninety" 
 
       }; 
 

 
      string[] expo = 
 
       { 
 
        "", "thousand", "million", "billion", "trillion", 
 
        "quadrillion", "quintillion" 
 
       }; 
 

 
      StringBuilder sb = new StringBuilder(); 
 
      int thousands = 0; 
 
      decimal power = 1; 
 

 
      if (number < 0) 
 
      { 
 
       sb.Append("minus "); 
 
       number = -number; 
 
      } 
 

 
      decimal n = Decimal.Truncate(number); 
 
      decimal cents = Decimal.Truncate((number - n) * 100); 
 

 
      if (n == Decimal.Zero) 
 
       sb.Append("zero"); 
 

 
      for (decimal i = n; i >= 1000; i /= 1000) 
 
      { 
 
       power *= 1000; 
 
       thousands++; 
 
      } 
 

 
      bool sep = false; 
 
      for (decimal i = n; thousands >= 0; i %= power, thousands--, power /= 1000) 
 
      { 
 
       int j = (int)(i/power); 
 
       int k = j % 100; 
 
       int hundreds = j/100; 
 
       int tens = j % 100/10; 
 
       int ones = j % 10; 
 

 
       if (j == 0) 
 
        continue; 
 

 
       if (hundreds > 0) 
 
       { 
 
        if (sep) 
 
         sb.Append(", "); 
 

 
        sb.Append(digit[hundreds]); 
 
        sb.Append(" hundred"); 
 
        sep = true; 
 
       } 
 

 
       if (k != 0) 
 
       { 
 
        if (sep) 
 
        { 
 
         sb.Append(" and "); 
 
         sep = false; 
 
        } 
 

 
        if (k < 20) 
 
         sb.Append(digit[k]); 
 
        else 
 
        { 
 
         sb.Append(baseten[tens]); 
 
         if (ones > 0) 
 
         { 
 
          sb.Append("-"); 
 
          sb.Append(digit[ones]); 
 
         } 
 
        } 
 
       } 
 

 
       if (thousands > 0) 
 
       { 
 
        sb.Append(" "); 
 
        sb.Append(expo[thousands]); 
 
        sep = true; 
 
       } 
 
      } 
 

 
      sb.Append(" and "); 
 
      if (cents < 10) sb.Append("0"); 
 
      sb.Append(cents); 
 
      sb.Append("/100"); 
 

 
      return sb.ToString(); 
 
     } 
 
    }

それは私の代わりに 8万、四百三十の次の出力 8万、四三〇から四および08/100 を与えます-fourポイントゼロ8

答えて

0
var d = ((decimal)yourNumber).ToString(); 
//if yourNumber = 1.1234 
var d = (1.1234).ToString(); 

ちょうどtoString()を使用し、それが 細かい続きを読む動作します約Double.ToString()

+0

toString()は数値を単語に変換しません。私はちょうど文字列として投げられた数字ではなく、言葉でそれを欲しい。 – user7543912

+0

自分でToStringを上書きすることができます –

関連する問題