2012-02-06 57 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