Sumeet Gavhale
Sumeet Gavhale

Reputation: 800

converting currency to words with long values

i tried again to solve the errors but unable to get in correct output i m trying to insert long integer values from textfield but then string builder is making problem i guess. Its very problematic m not able to take a proper correction decision where to correct. First 3 if statements are executing without error the problem is with rest of if statements.

 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));

            }
        }

Upvotes: 0

Views: 1162

Answers (2)

Mohammod Hossain
Mohammod Hossain

Reputation: 4114

Cast long to int of last four if block

 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]); 
        }

your calling method from main()

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

Upvotes: 0

user180100
user180100

Reputation:

Here's the problem:

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

As n is a long, n / 1000 cannot be used as an indice. You need to cast to int:

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

EDIT: And do the same for the other indices.

Upvotes: 1

Related Questions