📄 numbertoletterconverter.java
字号:
package general;
import java.util.ArrayList;
import java.util.List;
public class NumberToLetterConverter
{
private static final String[] UNIDADES =
{ "", "UN ", "DOS ", "TRES ",
"CUATRO ", "CINCO ", "SEIS ", "SIETE ", "OCHO ", "NUEVE ", "DIEZ ",
"ONCE ", "DOCE ", "TRECE ", "CATORCE ", "QUINCE ", "DIECISEIS ",
"DIECISIETE ", "DIECIOCHO ", "DIECINUEVE ", "VEINTE " };
private static final String[] DECENAS =
{ "VENTI", "TREINTA ", "CUARENTA ",
"CINCUENTA ", "SESENTA ", "SETENTA ", "OCHENTA ", "NOVENTA ",
"CIEN " };
private static final String[] CENTENAS =
{ "CIENTO ", "DOSCIENTOS ",
"TRESCIENTOS ", "CUATROCIENTOS ", "QUINIENTOS ", "SEISCIENTOS ",
"SETECIENTOS ", "OCHOCIENTOS ", "NOVECIENTOS " };
private static final String[] SEP =
{
"", "MIL ", "MILLON ;MILLONES ", "MIL ", "BILLON ;BILLONES ", "MIL ", "TRILLON ;TRILLONES "};
/**
* Convierte a letras un numero de la forma $123,456.32 (StoreMath)
* <p>
* Creation date 5/06/2006 - 10:20:52 AM
*
* @param number
* Numero en representacion texto
* @return Numero en letras
* @since 1.0
*/
public static String convertNumberToLetter(String number, String separadorDec)
{
// divide los enteros de los decimales
String [] num = number.split(separadorDec);
String centavos = "";
List ent = new ArrayList();
List plural = new ArrayList();
// divide en grupos de tres desde el final
int modulo = num[0].length() % 3;
int div = (num[0].length() - modulo) / 3;
int indice = 0;
//String valor = "";
if (modulo > 0)
{
indice = modulo;
ent.add(num[0].substring(0, indice));
}
for(int i = 0; i < div; i++)
{
ent.add(num[0].substring(indice, indice + 3));
indice += 3;
}
for(int i= 0; i< ent.size();i++)
{
System.out.println("[" + i + "]: " + ent.get(i));
}
if(num.length > 1)
{
centavos = " " + num[1] + "/100";
}
return proceso(ent).trim() + centavos;
}
private static String proceso(List entero)
{
String res = "";
int j = 0;
for(int i = entero.size() - 1; i >= 0; i--)
{
String valor = entero.get(i).toString();
String cadena[] = SEP[j].split(";");
String cad = cadena[0];
if(cadena.length > 1 && Integer.parseInt(valor) != 1)
cad = cadena[1];
if(Integer.parseInt(valor) == 0 && j % 2 != 0)
cad = " ";
res = convertNumber(valor) + cad + res.trim();
j++;
}
return res;
}
private static String procesarCentavos(String centavosCadena)
{
String converted = "";
// Descompone los centavos - Camilo
int centavos = Integer.parseInt(String.valueOf(getDigitAt(
centavosCadena, 2))
+ String.valueOf(getDigitAt(centavosCadena, 1))
+ String.valueOf(getDigitAt(centavosCadena, 0)));
if (centavos == 1)
converted += " CON UN CENTAVO";
if (centavos > 1)
converted += " CON " + convertNumber(String.valueOf(centavos))
+ "CENTAVOS";
return converted;
}
/**
* Convierte un numero en representacion numerica a uno en representacion de
* texto. El numero es valido si esta entre 0 y 999'999.999
* <p>
* Creation date 3/05/2006 - 05:37:47 PM
*
* @param number
* Numero a convertir
* @return Numero convertido a texto
* @throws NumberFormatException
* Si el numero esta fuera del rango
* @since 1.0
*/
public static String convertNumberToLetter(double number) throws NumberFormatException
{
String converted = new String();
// Validamos que sea un numero legal
double doubleNumber = Math.round(number);
if (doubleNumber > 999999999)
throw new NumberFormatException(
"El numero es mayor de 999'999.999, "
+ "no es posible convertirlo");
String splitNumber[] = String.valueOf(doubleNumber).replace('.', '#')
.split("#");
// Descompone el trio de millones -
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -