2013-01-05 136 views
0

我再次嘗試解決錯誤,但無法獲得正確的輸出我嘗試從文本字段中插入長整數值,但隨後字符串生成器正在讓我猜的問題。它的問題很嚴重,無法做出正確的糾正決定。前3個if語句執行時沒有錯誤,問題與if語句的其餘部分有關。將貨幣轉換爲長值的字

public static String numberToWord(final long num) { 
    // special case to simplify later on 
    if (num == 0) { 
    return "zero"; 
    } 

    // constant number names for each category 

    // single digits 
    final String n_1_9[] = new String[]{"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
    // unfortunate special cases for ten, eleven, twelve, and teens 
    final String n_10_19[] = new String[]{"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; 
    // tens 
    final String n_20_90[] = new String[]{"", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; 
    final String n_100 = "hundred"; 
    final String n_1000 = "thousand"; 
    final String n_100000 = "lakh"; 
    final String n_10000000 = "crore"; 

    // use StringBuilder for efficient modifications 
    StringBuilder numWord = new StringBuilder(); 

    long n = num; 

    // append with selective recursion for all our cases 


    if (n >= 10000000) { 
    numWord.append(numberToWord(n/10000000)); 
    numWord.append(' '); 
    numWord.append(n_10000000); 
    numWord.append(' '); 
    n %= 10000000; 
    } 

    if (n >= 100000) { 
    numWord.append(numberToWord(n/100000)); 
    numWord.append(' '); 
    numWord.append(n_100000); 
    numWord.append(' '); 
    n %= 100000; 
    } 

    if (n >= 1000) { 
    numWord.append(numberToWord(n/1000)); 
    numWord.append(' '); 
    numWord.append(n_1000); 
    numWord.append(' '); 
    n %= 1000; 
    } 
    if (n >= 100) { 
    numWord.append(n_1_9[n/100]); 
    numWord.append(' '); 
    numWord.append(n_100); 
    numWord.append(' '); 
    n %= 100; 

    } 
    if (n >= 20) { 
    numWord.append(n_20_90[(n/10) - 1]); 
    numWord.append(' '); 
    n %= 10; 
    } 
    if (n >= 10) { 
    numWord.append(n_10_19[n - 10]); 
    } 
    if (n < 10) { 
    numWord.append(n_1_9[n]); 
    } 

    return numWord.toString().trim(); 
    } 
     private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) { 

     } 

     private void jTextField2MouseClicked(java.awt.event.MouseEvent evt) { 
      if(evt.getSource()==jTextField2){ 
       long jml = Long.parseLong(jTextField3.getText()); 
       jTextField1.setText(numberToWord(jml)); 

      } 
     } 
+0

有什麼確切的錯誤或問題? – Swapnil

+0

它說需要int找到長 –

+0

這是不兼容類型的問題。 – Swapnil

回答

1

這裏的問題:

numWord.append(n_1_9[n/100]); 

由於nlongn/1000不能用作指數之。你需要轉換爲int

numWord.append(n_1_9[(int) n/100]); 

編輯:做同樣的其他指數。

+0

但會int n接受11位數值 –

+0

'n'仍然是'long',它在一些情況下僅用作'int'(當投射時)。 – 2013-01-05 09:00:10

+0

你真的很努力thanx :-) –

0

鑄久過去四年,如果塊

if (n >= 100) { 
     numWord.append(n_1_9[(int) (n/100)]); 
     numWord.append(' '); 
     numWord.append(n_100); 
     numWord.append(' '); 
     n %= 100; 

     } 
     if (n >= 20) { 
     numWord.append(n_20_90[(int) ((n/10) - 1)]); 
     numWord.append(' '); 
     n %= 10; 
     } 
     if (n >= 10) { 
     numWord.append(n_10_19[(int) (n - 10)]); 
     } 
     if (n < 10) { 
     numWord.append(n_1_9[(int) n]); 
     } 

您的調用方法INT從主()

String str = numberToWord(100222222222L); 
System.out.println("str:: "+ str);