import java.math.BigInteger; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.text.DecimalFormat;
public class Extenso { private ArrayList nro; private BigInteger num; private String Qualificadores[][] = { {"centavo", "centavos"}, {"", ""}, {"mil", "mil"}, {"milhão", "milhões"}, {"bilhão", "bilhões"}, {"trilhão", "trilhões"}, {"quatrilhão", "quatrilhões"}, {"quintilhão", "quintilhões"}, {"sextilhão", "sextilhões"}, {"septilhão", "septilhões"} }; private String Numeros[][] = { {"zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez", "onze", "doze", "treze", "quatorze", "quinze", "desesseis", "desessete", "dezoito", "desenove"}, {"vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"}, {"cem", "cento", "duzentos", "trezentos", "quatrocentos", "quinhentos", "seiscentos", "setecentos", "oitocentos", "novecentos"} }; /** * Construtor */ public Extenso() { nro = new ArrayList(); } /** * Construtor * [EMAIL PROTECTED] dec valor para colocar por extenso */ public Extenso(BigDecimal dec) { this(); setNumber(dec); } /** * Constructor for the Extenso object * [EMAIL PROTECTED] dec valor para colocar por extenso */ public Extenso(double dec) { this(); setNumber(dec); } /** * Sets the Number attribute of the Extenso object * [EMAIL PROTECTED] dec The new Number value */ public void setNumber(BigDecimal dec) { // Converte para inteiro arredondando os centavos num = dec .setScale(2, BigDecimal.ROUND_HALF_UP) .multiply(BigDecimal.valueOf(100)) .toBigInteger(); // Adiciona valores nro.clear(); if (num.equals(BigInteger.ZERO)) { // Centavos nro.add(new Integer(0)); // Valor nro.add(new Integer(0)); } else { // Adiciona centavos addRemainder(100); // Adiciona grupos de 1000 while (!num.equals(BigInteger.ZERO)) { addRemainder(1000); } } } public void setNumber(double dec) { setNumber(new BigDecimal(dec)); } /** * Description of the Method */ public void show() { Iterator valores = nro.iterator(); while (valores.hasNext()) { System.out.println(((Integer) valores.next()).intValue()); } System.out.println(toString()); } /** * Description of the Method * [EMAIL PROTECTED] Description of the Returned Value */ public String toString() { StringBuffer buf = new StringBuffer(); int numero = ((Integer) nro.get(0)).intValue(); int ct; for (ct = nro.size() - 1; ct > 0; ct--) { // Se ja existe texto e o atual não é zero if (buf.length() > 0 && ! ehGrupoZero(ct)) { buf.append(" e "); } buf.append(numToString(((Integer) nro.get(ct)).intValue(), ct)); } if (buf.length() > 0) { if (ehUnicoGrupo()) buf.append(" de "); while (buf.toString().endsWith(" ")) buf.setLength(buf.length()-1); if (ehPrimeiroGrupoUm()) buf.insert(0, "h"); if (nro.size() == 2 && ((Integer)nro.get(1)).intValue() == 1) { buf.append(" real"); } else { buf.append(" reais"); } if (((Integer) nro.get(0)).intValue() != 0) { buf.append(" e "); } } if (((Integer) nro.get(0)).intValue() != 0) { buf.append(numToString(((Integer) nro.get(0)).intValue(), 0)); } return buf.toString(); } private boolean ehPrimeiroGrupoUm() { if (((Integer)nro.get(nro.size()-1)).intValue() == 1) return true; return false; } /** * Adds a feature to the Remainder attribute of the Extenso object * [EMAIL PROTECTED] divisor The feature to be added to the Remainder attribute */ private void addRemainder(int divisor) { // Encontra newNum[0] = num modulo divisor, newNum[1] = num dividido divisor BigInteger[] newNum = num.divideAndRemainder(BigInteger.valueOf(divisor)); // Adiciona modulo nro.add(new Integer(newNum[1].intValue())); // Altera numero num = newNum[0]; } /** * Description of the Method * [EMAIL PROTECTED] ps Description of Parameter [EMAIL PROTECTED] Description of the Returned Value */ private boolean temMaisGrupos(int ps) { for (; ps > 0; ps--) { if (((Integer) nro.get(ps)).intValue() != 0) { return true; } } return false; } /** * Description of the Method * [EMAIL PROTECTED] ps Description of Parameter [EMAIL PROTECTED] Description of the Returned Value */ private boolean ehUltimoGrupo(int ps) { return (ps > 0) && ((Integer)nro.get(ps)).intValue() != 0 && !temMaisGrupos(ps - 1); } /** * Description of the Method * [EMAIL PROTECTED] Description of the Returned Value */ private boolean ehUnicoGrupo() { if (nro.size() <= 3) return false; if (!ehGrupoZero(1) && !ehGrupoZero(2)) return false; boolean hasOne = false; for(int i=3; i < nro.size(); i++) { if (((Integer)nro.get(i)).intValue() != 0) { if (hasOne) return false; hasOne = true; } } return true; } boolean ehGrupoZero(int ps) { if (ps <= 0 || ps >= nro.size()) return true; return ((Integer)nro.get(ps)).intValue() == 0; } /** * Description of the Method * [EMAIL PROTECTED] numero Description of Parameter [EMAIL PROTECTED] escala Description of Parameter [EMAIL PROTECTED] Description of the Returned Value */ private String numToString(int numero, int escala) { int unidade = (numero % 10); int dezena = (numero % 100); //* nao pode dividir por 10 pois verifica de 0..19 int centena = (numero / 100); StringBuffer buf = new StringBuffer(); if (numero != 0) { if (centena != 0) { if (dezena == 0 && centena == 1) { buf.append(Numeros[2][0]); } else { buf.append(Numeros[2][centena]); } } if ((buf.length() > 0) && (dezena != 0)) { buf.append(" e "); } if (dezena > 19) { dezena /= 10; buf.append(Numeros[1][dezena - 2]); if (unidade != 0) { buf.append(" e "); buf.append(Numeros[0][unidade]); } } else if (centena == 0 || dezena != 0) { buf.append(Numeros[0][dezena]); } buf.append(" "); if (numero == 1) { buf.append(Qualificadores[escala][0]); } else { buf.append(Qualificadores[escala][1]); } } return buf.toString(); } /** * Para teste * [EMAIL PROTECTED] args numero a ser convertido */ public static void main(String[] args) { char ch1, ch2, ch3; if (args.length == 0) { System.out.println("Sintax : ...Extenso <numero>"); return; } String sequencia = "abcdsd"; /* for (int i = 0; i < sequencia.length()-2; i++) { ch1 = sequencia.charAt(i); ch2 = sequencia.charAt(i+1); ch3 = sequencia.charAt(i+2); if ((ch1+1 == ch2 && ch2+1 == ch3) || (ch1-1 == ch2 && ch2-1 == ch3)){ System.out.println(ch1+" "+ch2+" "+ch3); } }*/ if (sequencia.indexOf("asd")!=-1){ System.out.println(sequencia.indexOf("asd")); } Extenso teste = new Extenso(new BigDecimal(args[0])); System.out.println("Numero : " + (new DecimalFormat().format(Double.valueOf(args[0])))); System.out.println("Extenso : " + teste.toString().toUpperCase()); } } --- Elias Sales <[EMAIL PROTECTED]> wrote: > de 0 a 99... > > > public class Exercicio16 { > public static final void main(String args[]) { > int valor=0, digitos=args[0].length(); > try { > valor = Integer.parseInt(args[0]); > if (valor<0 || valor>99) { > System.out.println("valores validos: 0 .. > 99"); > return; > } > } catch (NumberFormatException e) { > System.out.println("argumento invalido"); > } > System.out.print("> "); > if(digitos==2){ > switch(args[0].charAt(0)) { > case '1': > switch(valor) { > case 10: System.out.println("Dez"); > return; > case 11: System.out.println("Onze"); > return; > case 12: System.out.println("Doze"); > return; > case 13: System.out.println("Treze"); > return; > case 14: System.out.println("Quatorze"); > return; > case 15: System.out.println("Quinze"); > return; > case 16: > System.out.println("Dezesseis"); return; > case 17: System.out.println("Dezesete"); > return; > case 18: System.out.println("Dezoito"); > return; > case 19: System.out.println("Dezenove"); > return; > } > case '2': System.out.print("Vinte"); break; > case '3': System.out.print("Trinta"); break; > case '4': System.out.print("Quarenta"); > break; > case '5': System.out.print("Cinquenta"); > break; > case '6': System.out.print("Sessenta"); > break; > case '7': System.out.print("Setenta"); > break; > case '8': System.out.print("Oitenta"); > break; > case '9': System.out.print("Noventa"); > break; > } > if (valor>10) > System.out.print(" e "); > } > switch(args[0].charAt(digitos-1)) { > case '0': if (valor==0) > System.out.println("Zero"); break; > case '1': System.out.println("Um"); break; > case '2': System.out.println("Dois"); break; > case '3': System.out.println("Tres"); break; > case '4': System.out.println("Quatro"); break; > case '5': System.out.println("Cinco"); break; > case '6': System.out.println("Seis"); break; > case '7': System.out.println("Sete"); break; > case '8': System.out.println("Oito"); break; > case '9': System.out.println("Nove"); break; > } > } > } > ----- Original Message ----- > From: "Arnaldo Escossio" <[EMAIL PROTECTED]> > To: <discussao@cejug.org> > Sent: Wednesday, March 02, 2005 6:44 PM > Subject: [cejug-discussao] valor por extenso > > > Olá caros amigos, > > será que alguém tem uma função que retorne um valor > por extenso feito em > java? > > encontrei alguns na net mas todos eles eu teria de > mexer no código pra > ficar bom, e não disponho de tempo. > > Desde já, meus agradecimentos > -- > Arnaldo Escóssio > [EMAIL PROTECTED] > [EMAIL PROTECTED] > > ---------------------------------------------------------------------------- > --------------- > Ceara' Java User Group > > Para cancelar sua assinatura, envie um e-mail > para: > [EMAIL PROTECTED] > Para mais informacoes, mande um e-mail para: > [EMAIL PROTECTED] > Falar com o administrador? e-mail para: > [EMAIL PROTECTED] > > > > ------------------------------------------------------------------------------------------- > Ceara' Java User Group > > Para cancelar sua assinatura, envie um e-mail > para: [EMAIL PROTECTED] > Para mais informacoes, mande um e-mail para: > [EMAIL PROTECTED] > Falar com o administrador? e-mail para: > [EMAIL PROTECTED] > > > __________________________________________________ Converse com seus amigos em tempo real com o Yahoo! Messenger http://br.download.yahoo.com/messenger/ ------------------------------------------------------------------------------------------- Ceara' Java User Group Para cancelar sua assinatura, envie um e-mail para: [EMAIL PROTECTED] Para mais informacoes, mande um e-mail para: [EMAIL PROTECTED] Falar com o administrador? e-mail para: [EMAIL PROTECTED]