2012-02-06 72 views
6

我有Windows应用程序,我需要将在文本框中输入的金额转换为ruppes和paise格式的文字。 例如我的金额是2356.54那么它应该显示two thousand three hundred fifty six ruppes and fifty four paise only但是,我有代码转换amt单词,但我无法显示paise。我包括我的代码作为参考目的。convert amount to rupees and paise in words format in c#

private void btntowords_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show(words(Convert.ToInt32(textBox1.Text))); 
     } 

     public string words(int numbers) 
     { 
      int number = numbers; 

      if (number == 0) return "Zero"; 
      if (number == -2147483648) return "Minus Two Hundred and Fourteen Crore Seventy Four Lakh Eighty Three Thousand Six Hundred and Forty Eight"; 
      int[] num = new int[4]; 
      int first = 0; 
      int u, h, t; 
      System.Text.StringBuilder sb = new System.Text.StringBuilder(); 
      if (number < 0) 
      { 
       sb.Append("Minus "); 
       number = -number; 
      } 
      string[] words0 = {"" ,"One ", "Two ", "Three ", "Four ", 
"Five " ,"Six ", "Seven ", "Eight ", "Nine "}; 
      string[] words1 = {"Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", 
"Fifteen ","Sixteen ","Seventeen ","Eighteen ", "Nineteen "}; 
      string[] words2 = {"Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", 
"Seventy ","Eighty ", "Ninety "}; 
      string[] words3 = { "Thousand ", "Lakh ", "Crore " }; 
      num[0] = number % 1000; // units 
      num[1] = number/1000; 
      num[2] = number/100000; 
      num[1] = num[1] - 100 * num[2]; // thousands 
      num[3] = number/10000000; // crores 
      num[2] = num[2] - 100 * num[3]; // lakhs 
      for (int i = 3; i > 0; i--) 
      { 
       if (num[i] != 0) 
       { 
        first = i; 
        break; 
       } 
      } 
      for (int i = first; i >= 0; i--) 
      { 
       if (num[i] == 0) continue; 
       u = num[i] % 10; // ones 
       t = num[i]/10; 
       h = num[i]/100; // hundreds 
       t = t - 10 * h; // tens 
       if (h > 0) sb.Append(words0[h] + "Hundred "); 
       if (u > 0 || t > 0) 
       { 
        if (h > 0 || i == 0) sb.Append("and "); 
        if (t == 0) 
         sb.Append(words0[u]); 
        else if (t == 1) 
         sb.Append(words1[u]); 
        else 
         sb.Append(words2[t - 2] + words0[u]); 
       } 
       if (i != 0) sb.Append(words3[i - 1]); 
      } 
      return sb.ToString().TrimEnd(); 
     } 

它不应该显示pasie如果有这样的2356.00 所以我有很多方法试图让paise,但没有成功量。我曾尝试ggogle,但没有得到正是我想要的。

回答

4

您需要将小数点分开,并在小数位之前和小数点后两位分开。例如,在56.2中,您分别获得56个和2个,并分别为他们调用单词()函数。你会得到两个字符串一个“五十六”和第二个“两个”。你可以加入这些字符串来说“五十六卢比2 paisas”。

-2

给出的输入数字最多为999999999输出将以文字形式输出。

`A级 { 的String [] words0 = { “零”, “一”, “二”, “三”, “四有”, “五”, “六”, “七宗罪”, “八”“九”“十”“十一”“十二”“十三”“十四”“十五”“十六”“十七”“十八”“十九”“二十“}; string [] words2 = {“Zero”,“Ten”,“Twenty”,“Thirty”,“Forty”,“Fifty”,“Sixty”,“70”,“Eighty”,“Ninety” }; string [] words3 = {“Hundred”,“Thousand”,“Lakh”,“Crore”}; int [] numbers = new int [] {0,1,10,100,1000,10000,100000,1000000,1000000000,100000000,1000000000}; string numstr; string words =“”; int tempNum; int temp = 0;

public void ConvertToRupee(int number) { numstr = number.ToString(); words = ""; tempNum = number; temp = 0; while (numstr != "0" && numstr.Length != 0) { switch (numstr.Length) { case 1: words += words0[tempNum]; numstr = ""; break; case 2: if (tempNum <= 20) { words += words0[tempNum]; numstr = ""; } else { temp = tempNum/numbers[2]; words += words2[temp]; tempNum = tempNum % numbers[2]; numstr = tempNum.ToString(); } break; case 3: Method1(3, "Hundred "); break; case 4: Method1(4, "Thousand "); break; case 5: Method2(4, "Thousand "); break; case 6: Method1(6, "Lakh "); break; case 7: Method2(6, "Lakh "); break; case 8: Method1(8, "Crore "); break; case 9: Method2(8, "Crore "); break; default: break; } } words += "Rupees Only "; Console.WriteLine(number.ToString() + " : " + words); }

private void Method1(int n, string wo) { temp = tempNum/numbers[n]; words += words0[temp] + wo; tempNum = tempNum % numbers[n]; numstr = tempNum.ToString(); }

private void Method2(int n, string wo) { temp = tempNum/numbers[n]; if (temp == 10) words += words0[temp] + wo; else if (temp <= 20) words += words0[temp] + wo; else { int twoDig = temp/numbers[2]; int digit = temp % numbers[2]; words += words2[twoDig] + words0[digit] + wo; } tempNum = tempNum % numbers[n]; numstr = tempNum.ToString(); } }

+1

什么乱七八糟的!这只是一个大而无用的代码转储,并且代码甚至没有正确格式化,因此它是可读的! – 2016-12-30 11:19:56