2013-08-04 37 views
6

mặc dù câu hỏi này đã được đăng và trả lời trước đó. Tôi muốn được giúp đỡ với mã của tôi. Nhiệm vụ là chuyển đổi một số thành từ 0 đến 10 triệu. Tôi đã cố gắng làm điều đó với mã của tôi bằng cách sử dụng GUI, vấn đề là nó không trả về một câu trả lời nào cả. Bất cứ ai có thể giúp tôi trong việc xác định những gì các vấn đề trên mã có thể có thể được.chuyển đổi số thành các từ

mã bên dưới:

private void btnConvertToText_Click(object sender, EventArgs e) 
    { 
     string ConvertedNumber = " "; 
     int number = Convert.ToInt32(txtNumber.Text); 
     int Count = 0; 

      string [] ones = {" One ", " Two ", " Three ", " Four ", " Five ", " Six ", " Seven ", " Eight ", " Nine "}; 
      string [] teens= {" Eleven ", " Twelve ", " Thirteen ", " Fourtte n ", " Fifteen ", " Sixteen ", " Seventeen ", " Eighteen ", " Nineteen "}; 
      string [] tens = {" Ten ", " Twenty ", " Thirty ", " Fourty ", " Fifty ", " Sixty ", " Seventy ", " Eighty ", " Ninenty "}; 
      string [] moreThenTens = {" hundred ", " thousand ", " million "}; 

      while (number >= 0) 
      { 
       if (number == 0) 
       { 
        ConvertedNumber = "Zero"; 
       } 

       else if (number < 10) 
       { 
        for (int Counter = 1; Counter < 10; Counter++) 
        { 
         ConvertedNumber += ones[Counter-1]; 
        } 
       } 

       else if (number >= 10 && number < 100) 
       { 
        while (number > 10) 
        { 
         if (number > 10 && number < 20) 
         { 
          for (int x = 11; x < 20; x++) 
          { 
           if (number == x) 
           { 
            ConvertedNumber = teens[x - 11]; 
           } 
          } 
         } 

         else 
         { 
          number -= 10; 
          Count++; 
         } 

         ConvertedNumber += tens[Count - 1]; 
        } 
       } 

       else if (number >= 100 && number < 1000) 
       { 
        while (number > 100) 
        { 
         number -= 100; 
         Count++; 
        } 
        ConvertedNumber += ones[Count - 1] + moreThenTens[0]; 
       } 

       else if (number >= 1000 && number < 10000) 
       { 
        while (number > 1000) 
        { 
         number -= 1000; 
         Count++; 
        } 

        ConvertedNumber += ones[Count - 1] + moreThenTens[1]; 
       } 

       else if (number >= 10000 && number < 100000) 
       { 
        while (number > 10000) 
        { 
         if (number < 20000) 
         { 
          number -= 10000; 
          Count++; 
         } 

         else if (number >= 20000) 
         { 
          number -= 10000; 
          Count++; 
         } 

        } 

        if (Count >= 1) 
        { 
         if (number < 1000) 
         { 
          ConvertedNumber += tens[0] + moreThenTens[1]; 
         } 

         else if (number >= 1000) 
         { 
          ConvertedNumber += teens[Count - 1] + moreThenTens[1]; 
         } 
        } 

        else if (Count > 1) 
        { 
         ConvertedNumber += tens[Count - 1] + moreThenTens[1]; 
        } 
       } 

       else if (number >= 100000 && number < 1000000) 
       { 
        while (number > 100000) 
        { 
         number -= 100000; 
         Count++; 
        } 

        ConvertedNumber += ones[Count - 1] + moreThenTens[0] + moreThenTens[1]; 
       } 

       else if (number >= 1000000 && number < 10000000) 
       { 
        while (number > 1000000) 
        { 
         number -= 1000000; 
         Count++; 
        } 

        ConvertedNumber += ones[Count - 1] + moreThenTens[2]; 
       } 

       else if (number == 10000000) 
       { 
        while (number > 10000000) 
        { 
         number -= 10000000; 
         Count++; 
        } 

        ConvertedNumber += tens[0] + moreThenTens[2]; 
       } 
      } 

      txtConvertedNumber.Text = ConvertedNumber; 
    } 
} 
+2

thể bản sao của [số chuyển đổi trong lời nói C#] (http://stackoverflow.com/questions/2729752/convert-number-in-to-words-c-sharp) –

+2

Bạn đã từng bước qua mã bằng trình gỡ rối chưa? – GreatBigBore

+1

Tôi nghĩ rằng đây là http://www.blackbeltcoder.com/Articles/strings/converting-numbers-to-words những gì bạn muốn. – RahulD

Trả lời

5
while (number >= 0) 

Nó có vẻ như mã của bạn đang tạo ra một vòng lặp vô hạn. Lấy ví dụ:

if (number == 0) 
{ 
    ConvertedNumber = "Zero"; 
} 

này không bỏ vòng lặp của bạn, và do đó không bao giờ đến tại

txtConvertedNumber.Text = ConvertedNumber; 

Sử dụng một tấm séc để chuyển đổi số điện thoại, như:

if (number == 0) 
{ 
    ConvertedNumber = "Zero"; 
    number = -1; 
} 
+0

Tôi đoán cho mỗi số nó sẽ cho câu trả lời là số không! –

+1

Không nếu bạn bao gồm các kiểm tra chính xác và đảm bảo rằng nếu số đó đến 0 ở một nơi khác, nó sẽ tự động trở thành '-1' thay vì' 0' – bas

1

Bạn nên kiểm tra nếu con số bằng không trước vòng lặp while

if (number == 0) 
     ConvertedNumber= "Zero" ; 

Sau đó thay đổi trong khi như sau

while(number > 0) 
0

có vẻ như nó bị mắc kẹt trong vòng lặp .. i kiểm tra một phần số thiếu niên ở đây, dường như như bạn quên giảm các số đến dưới zero hoặc không

   else if (number >= 10 && number < 100) 
       { 
       if(number > 10) 
       { 
        if (number > 10 && number < 20) 
        { 
         for (int x = 11; x < 20; x++) 
         { 
          if (number == x) 
          { 
           ConvertedNumber += teens[x - 11]; 

          } 
         } 
         ***number -= 100;*** 
        } 

        else 
        { 
         number -= 10; 
         Count++; 
         ConvertedNumber += tens[Count - 1]; 
        } 


       } 
      } 
0

Điều này cũng sẽ hoạt động và làm cho mã của bạn dễ debug/theo dõi hơn.

while (NumberExists(ConvertedNumber, number)) 
{ 
    ... 
} 

Đặt phương thức này vào cùng một nameSpacebtnConvertToText_Click.

private static bool NumberExists(string convertedNumber, int number) 
    { 
     if (convertedNumber == " " && number != null) 
     { 
      return true; 
     } 
     else 
      return false; 
    } 

Nói chung, tôi khuyên bạn không nên thêm số ma thuật, như +1 hoặc -1 vào mã của bạn. Nó có thể làm cho gỡ lỗi nhiều hơn một chút của một công việc vặt. Nếu bạn phải làm điều đó để có được một cái gì đó để làm việc cố gắng tìm ra lý do tại sao và viết lại nó càng sớm càng tốt. Chắc chắn trước khi làm việc trên các phương pháp khác.

2

này có thể có ích

public static string NumberToWords(int number) 
    { 
     if (number == 0) 
      return "Zero"; 

     if (number < 0) 
      return "Minus " + NumberToWords(Math.Abs(number)); 

     string words = ""; 

     if ((number/1000000) > 0) 
     { 
      words += NumberToWords(number/1000000) + " Million "; 
      number %= 1000000; 
     } 

     if ((number/1000) > 0) 
     { 
      words += NumberToWords(number/1000) + " Thousand "; 
      number %= 1000; 
     } 

     if ((number/100) > 0) 
     { 
      words += NumberToWords(number/100) + " Hundred "; 
      number %= 100; 
     } 

     if (number > 0) 
     { 
      if (words != "") 
       words += "and "; 

      var unitsMap = new[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }; 
      var tensMap = new[] { "zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }; 

      if (number < 20) 
       words += unitsMap[number]; 
      else 
      { 
       words += tensMap[number/10]; 
       if ((number % 10) > 0) 
        words += "-" + unitsMap[number % 10]; 
      } 
     } 

     return words; 
    } 
1

này có thể giúp cho số thập phân số

string[] number = Number1.ToString().Split('.'); 

String Word=NumberToWords(convert.toInt64(number[0])) + " AND " +  NumberToWords(convert.toInt64(number[1])); 
+0

Làm thế nào mà có một câu trả lời cho câu hỏi này? –

Các vấn đề liên quan