Как преобразовать число в слова в Java

В настоящее время у нас есть грубый механизм для преобразования чисел в слова (например, с использованием нескольких статических массивов) и на основе размера числа, переводящего его в английский текст. Но мы сталкиваемся с проблемами из-за огромных цифр.

10183 = Ten thousand one hundred eighty three
90 = Ninety
5888 = Five thousand eight hundred eighty eight

Существует ли простая в использовании функция в какой-либо математической библиотеке, которую я могу использовать для этой цели?

36 ответов

Если вам нужно преобразовать число в слово на литовском, латышском, эстонском, английском или русском языках, вы можете найти реализацию здесь num2word

/* This program will print words for a number between 0 to 99999*/

    public class NumberInWords5Digits {

        static int testcase1 = 93284;

        public static void main(String args[]){
            NumberInWords5Digits testInstance = new NumberInWords5Digits();
            String result = testInstance.inWords(testcase1);
            System.out.println("Result : "+result);
        }

        //write your code here
        public String inWords(int num){
            int digit = 0;
            String word = "";
            int temp = num;
            while(temp>0)
            {
                if(temp%10 >= 0)
                    digit++;
                temp = temp/10;
            }

            if(num == 0)
                return "zero";

            System.out.println(num);
            if(digit == 1)
                word = inTens(num, digit);
            else if(digit == 2)
                word = inTens(num, digit);
            else if(digit == 3)
                word = inHundreds(num, digit);
            else if(digit == 4)
                word = inThousands(num, digit);
            else if(digit == 5)
                word = inThousands(num, digit);
            return word;
        }

        public String inTens(int num, int digit){
            int tens = 0;
            int units = 0;
            if(digit == 2)      
            {
                tens = num/10;
                units = num%10;
            }
            String unit = "";
            String ten = "";
            String word = "";

            if(num == 10)
            {word = "ten"; return word;}

            if(num == 11)
            {word = "eleven"; return word;}
            if(num == 12)
            {word = "twelve"; return word;}
            if(num == 13)
            {word = "thirteen"; return word;}
            if(num == 14)
            {word = "fourteen"; return word;}
            if(num == 15)
            {word = "fifteen"; return word;}
            if(num == 16)
            {word = "sixteen"; return word;}
            if(num == 17)
            {word = "seventeen"; return word;}
            if(num == 18)
            {word = "eighteen"; return word;}
            if(num == 19)
            {word = "nineteen"; return word;}

            if(units == 1 || num == 1)
                unit = "one";
            else if(units == 2 || num == 2)
                unit = "two";
            else if(units == 3 || num == 3)
                unit = "three";
            else if(units == 4 || num == 4)
                unit = "four";
            else if(units == 5 || num == 5)
                unit = "five";
            else if(units == 6 || num == 6)
                unit = "six";
            else if(units == 7 || num == 7)
                unit = "seven";
            else if(units == 8 || num == 8)
                unit = "eight";
            else if(units == 9 || num == 9)
                unit = "nine";

            if(tens == 2)
                ten = "twenty";
            else if(tens == 3)
                ten = "thirty";
            else if(tens == 4)
                ten = "forty";
            else if(tens == 5)
                ten = "fifty";
            else if(tens == 6)
                ten = "sixty";
            else if(tens == 7)
                ten = "seventy";
            else if(tens == 8)
                ten = "eighty";
            else if(tens == 9)
                ten = "ninety";

            if(digit == 1)
                word = unit;
            else if(digit == 2)
                word = ten + " " + unit;
            return word;
        }

        //inHundreds(525, 3)
        public String inHundreds(int num, int digit){

            int hundreds = num/100; // =5
            int tensAndUnits = num%100; // =25
            String hundred = "";
            String tenAndUnit = "";
            String word = "";

            tenAndUnit = inTens(tensAndUnits, 2);

            if(hundreds == 1)
                hundred = "one hundred";
            else if(hundreds == 2)
                hundred = "two hundred";
            else if(hundreds == 3)
                hundred = "three hundred";
            else if(hundreds == 4)
                hundred = "four hundred";
            else if(hundreds == 5)
                hundred = "five hundred";
            else if(hundreds == 6)
                hundred = "six hundred";
            else if(hundreds == 7)
                hundred = "seven hundred";
            else if(hundreds == 8)
                hundred = "eight hundred";
            else if(hundreds == 9)
                hundred = "nine hundred";

            word = hundred + " " + tenAndUnit;
            return word;
        }

        public String inThousands(int num, int digit){

            int thousands = 0;      
            int hundredsAndOthers = num%1000;
            String thousand = "";
            String hundredAndOther = "";
            String word = "";
            if(digit == 5)
            {
                thousands = num/1000;
                thousand = inTens(thousands, 2);            
            }
            else if(digit == 4)
            {
                thousands = num/1000;
                thousand = inTens(thousands, 1);
            }

            if(hundredsAndOthers/100 == 0) // in case of "023"
                hundredAndOther = inTens(hundredsAndOthers, 2);
            else
                hundredAndOther = inHundreds(hundredsAndOthers, 3);

            word = thousand + " thousand " + hundredAndOther;

            return word;
        }
    }
import java.lang.*;
import java.io.*;
public class rupee
{
public static void main(String[] args)throws  IOException
{

 int len=0,revnum=0,i,dup=0,j=0,k=0;
 int gvalue;
  String[] ones={"one","Two","Three","Four","Five","Six","Seven","Eight","Nine","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",""};
    String[] twos={"Ten","Twenty","Thirty","Fourty","fifty","Sixty","Seventy","eighty","Ninety",""};
System.out.println("\n Enter value");
InputStreamReader b=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(b);
gvalue=Integer.parseInt(br.readLine());
if(gvalue==10)

System.out.println("Ten");

else if(gvalue==100)

System.out.println("Hundred");

else if(gvalue==1000)
System.out.println("Thousand");

dup=gvalue;
for(i=0;dup>0;i++)
{
revnum=revnum*10+dup%10;
len++;
dup=dup/10;
}
while(j<len)
{
if(gvalue<10)
{
System.out.println(ones[gvalue-1]);
}
else if(gvalue>10&&gvalue<=19)
{
System.out.println(ones[gvalue-2]);
break;
}
else if(gvalue>19&&gvalue<100)
{
k=gvalue/10;
gvalue=gvalue%10;
System.out.println(twos[k-1]);
}
else if(gvalue>100&&gvalue<1000)
{
k=gvalue/100;
gvalue=gvalue%100;
System.out.println(ones[k-1] +"Hundred");
}
else if(gvalue>=1000&&gvalue<9999)
{
k=gvalue/1000;
gvalue=gvalue%1000;
System.out.println(ones[k-1]+"Thousand");
    }
else if(gvalue>=11000&&gvalue<=19000)
{
    k=gvalue/1000;
    gvalue=gvalue%1000;
    System.out.println(twos[k-2]+"Thousand");
}       
else if(gvalue>=12000&&gvalue<100000)
{
k=gvalue/10000;
    gvalue=gvalue%10000;
System.out.println(ones[gvalue-1]);
}
else
{
System.out.println("");
    }
j++;
}
}
}

Это еще один способ...(с ограниченным диапазоном)

public static String numToWord(Integer i) {

 final  String[] units = { "Zero", "One", "Two", "Three",
        "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven",
        "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen",
        "Seventeen", "Eighteen", "Nineteen" };
 final  String[] tens = { "", "", "Twenty", "Thirty", "Forty",
        "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
    if (i < 20)
        return units[i];
    if (i < 100)
        return tens[i / 10] + ((i % 10 > 0) ? " " + numToWord(i % 10) : "");
    if (i < 1000)
        return units[i / 100] + " Hundred"
                + ((i % 100 > 0) ? " and " + numToWord(i % 100) : "");
    if (i < 1000000)
        return numToWord(i / 1000) + " Thousand "
                + ((i % 1000 > 0) ? " " + numToWord(i % 1000) : "");
    return numToWord(i / 1000000) + " Million "
            + ((i % 1000000 > 0) ? " " + numToWord(i % 1000000) : "");
}
    import java.util.Scanner;

public class StringToNum {
public static void main(String args[])
  {
    Scanner sc=new Scanner(System.in);
    System.out.println("Enter the no: ");
    int  no=sc.nextInt();
    int arrNum[]=new int[10];
    int i=0;
    while(no!=0)
    {
      arrNum[i]=no%10;
      no=no/10;
      i++;
    }
    int len=i;
    int arrNum1[]=new int[len];
    int j=0;
    for(int k=len-1;k>=0;k--)
    {
        arrNum1[j]=arrNum[k];
        j++;
    }
    StringToNum stn=new StringToNum();
    String output="";
    switch(len)
    {
      case 1:
      {
         output+=stn.strNum1(arrNum1[len-1]);
         System.out.println("output="+output);
         break;
      }
      case 2:
      {
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        // output=output+" "+stn.strNum1(arrNum1[len-1]);
         System.out.println("output="+output);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
         System.out.println("output="+output);
        }
         break;
      }
      case 3:
      {
        output=stn.strNum1(arrNum1[len-3])+" hundred ";
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println("output="+output);  
        break;
      }
      case 4:
      {
        output=stn.strNum1(arrNum1[len-4])+" thousand ";
        if(!stn.strNum1(arrNum1[len - 3]).equals(""))
        {
        output+=stn.strNum1(arrNum1[len-3])+" hundred ";
        }
        int no1=arrNum1[len-2]*10+arrNum1[len-1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println("output="+output);
        break;
      }

      case 5:
      {
        int no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1)+" thousand ";
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+" "+stn.strNum1(arrNum1[len-4])+" thousand ";
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(""))
        {
        output+=stn.strNum1(arrNum1[len-3])+" hundred ";
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println("output="+output);
        break;
      }
      case 6:
      {
        output+=stn.strNum1(arrNum1[len-6])+" million ";
        int no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1>=11 & no1<=19)
        {
         output+=stn.strNum2(no1)+" thousand ";
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+" "+stn.strNum1(arrNum1[len-4])+" thousand ";
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(""))
        {
        output+=stn.strNum1(arrNum1[len-3])+" hundred ";
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println("output="+output);
        break;
      }
      case 7:
      {
        int no1=arrNum1[len-7]*10+arrNum1[len-6];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1)+" Milloin ";
        }
        else
        {
         arrNum1[len-7]=arrNum1[len-7]*10;
         output+=stn.strNum2(arrNum1[len-7]);
         output=output+" "+stn.strNum1(arrNum1[len-6])+" Million ";
        }
        no1=arrNum1[len-5]*10+arrNum1[len-4];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1)+" Thousand ";
        }
        else
        {
         arrNum1[len-5]=arrNum1[len-5]*10;
         output+=stn.strNum2(arrNum1[len-5]);
         output=output+" "+stn.strNum1(arrNum1[len-4])+" Thousand ";
        }
        if( !stn.strNum1(arrNum1[len - 3]).equals(""))
        {
        output+=stn.strNum1(arrNum1[len-3])+" Hundred ";
        }
        no1 = arrNum1[len - 2] * 10 + arrNum1[len - 1];
        if(no1>=11 & no1<=19)
        {
         output=stn.strNum2(no1);
        }
        else
        {
         arrNum1[len-2]=arrNum1[len-2]*10;
         output+=stn.strNum2(arrNum1[len-2]);
         output=output+" "+stn.strNum1(arrNum1[len-1]);
        }
        System.out.println("output="+output);
        break;
      }
    }

  }
  String strNum1(int a)
  {
    String op="";
    switch(a)
    {
     case 1:
     {
     op="one";
     break;
     }
     case 2:
     {
     op="two";
     break;
     }
     case 3:
     {
     op="three";
     break;
     }
     case 4:
     {
     op="four";
     break;
     }
     case 5:
     {
     op="five";
     break;
     }
     case 6:
     {
     op="six";
     break;
     }
     case 7:
     {
     op="seven";
     break;
     }
     case 8:
     {
     op="eight";
     break;
     }
     case 9:
     {
     op="nine";
     break;
     }
    }
    return op;
  }
  String strNum2(int a)
  {
    String op="";
    switch(a)
    {
     case 10:
     {
     op="ten";
     break;
     }
     case 20:
     {
     op="twenty";
     break;
     }
     case 30:
     {
     op="thirty";
     break;
     }
     case 40:
     {
     op="fourty";
     break;
     }
     case 50:
     {
     op="fifty";
     break;
     }
     case 60:
     {
     op="sixty";
     break;
     }
     case 70:
     {
     op="seventy";
     break;
     }
     case 80:
     {
     op="eighty";
     break;
     }
     case 90:
     {
     op="ninty";
     break;
     }
     case 11:
     {
     op="eleven";
     break;
     }
     case 12:
     {
     op="twelve";
     break;
     }
     case 13:
     {
     op="thirteen";
     break;
     }
     case 14:
     {
     op="fourteen";
     break;
     }
     case 15:
     {
     op="fifteen";
     break;
     }
     case 16:
     {
     op="sixteen";
     break;
     }
     case 17:
     {
     op="seventeen";
     break;
     }
     case 18:
     {
     op="eighteen";
     break;
     }
     case 19:
     {
     op="nineteen";
     break;
     }
    }
    return op;
  }
}

Я использовал 2-х мерный массив...

   import java.util.Scanner;


   public class numberEnglish {
   public static void main(String args[])
        {
    String[ ][ ] aryNumbers = new String[9][4];
    aryNumbers[0][0] = "one";
    aryNumbers[0][1] = "ten";
    aryNumbers[0][2] = "one hundred and";
    aryNumbers[0][3] = "one thousand";

    aryNumbers[1][0] = "two";
    aryNumbers[1][1] = "twenty";
    aryNumbers[1][2] = "two hundred and";
    aryNumbers[1][3] = "two thousand";

    aryNumbers[2][0] = "three";
    aryNumbers[2][1] = "thirty";
    aryNumbers[2][2] = "three hundred and";
    aryNumbers[2][3] = "three thousand";

    aryNumbers[3][0] = "four";
    aryNumbers[3][1] = "fourty";
    aryNumbers[3][2] = "four hundred and";
    aryNumbers[3][3] = "four thousand";

    aryNumbers[4][0] = "five";
    aryNumbers[4][1] = "fifty";
    aryNumbers[4][2] = "five hundred and";
    aryNumbers[4][3] = "five thousand";

    aryNumbers[5][0] = "six";
    aryNumbers[5][1] = "sixty";
    aryNumbers[5][2] = "six hundred and";
    aryNumbers[5][3] = "six thousand";

    aryNumbers[6][0] = "seven";
    aryNumbers[6][1] = "seventy";
    aryNumbers[6][2] = "seven hundred and";
    aryNumbers[6][3] = "seven thousand";

    aryNumbers[7][0] = "eight";
    aryNumbers[7][1] = "eighty";
    aryNumbers[7][2] = "eight hundred and";
    aryNumbers[7][3] = "eight thousand";

    aryNumbers[8][0] = "nine";
    aryNumbers[8][1] = "ninty";
    aryNumbers[8][2] = "nine hundred and";
    aryNumbers[8][3] = "nine thousand";


    //System.out.println(aryNumbers[0] + " "+aryNumbers[0] + " ");

    int number=0;
    Scanner sc = new Scanner(System.in);
    System.out.println(" Enter Number 4 digited number:: ");
    number = sc.nextInt();
    int temp = number;
    int count=1;
    String english="";
    String tenglish = "";
    if(number == 0)
    {
        System.out.println("*********");
        System.out.println("Zero");
        System.out.println("*********");
        sc.close();
        return;
    }
    while(temp !=0)
    {

        int r = temp%10;
        if(r==0)
        {
            tenglish = " zero ";
            count++;
        }
        else
        {

            int t1=r-1;
            int t2 = count-1;
            //System.out.println(t1 +" "+t2);
            count++;
            tenglish = aryNumbers[t1][t2];

            //System.out.println(aryNumbers[t1][t2]);
        }
        english = tenglish +" "+ english;
        temp = temp/10;

    }
    //System.out.println(aryNumbers[0][0]);
    english = english.replace("ten  zero", "ten");
    english = english.replace("twenty  zero", "twenty");
    english = english.replace("thirty  zero", "thirty");
    english = english.replace("fourty  zero", "fourty");
    english = english.replace("fifty  zero", "fifty");
    english = english.replace("sixty  zero", "sixty");
    english = english.replace("seventy  zero", "seventy");
    english = english.replace("eighty  zero", "eighty");
    english = english.replace("ninety  zero", "ninety");

    english = english.replace("ten one", "eleven");
    english = english.replace("ten two", "twelve");
    english = english.replace("ten three", "thirteen");
    english = english.replace("ten four", "fourteen");
    english = english.replace("ten five", "fifteen");
    english = english.replace("ten six", "sixteen");
    english = english.replace("ten seven", "seventeen");
    english = english.replace("ten eight", "eighteen");
    english = english.replace("ten nine", "nineteen");
    english = english.replace(" zero ", "");
    int length = english.length();
    String sub = english.substring(length-6,length-3);
    //System.out.println(length);
    //System.out.println(sub);
    if(sub.equals("and"))
    {
        //System.out.println("hello");
        english=english.substring(0,length-6);
    }
    System.out.println("********************************************");
    System.out.println(english);
    System.out.println("********************************************");
    sc.close();
}

}

Другие вопросы по тегам