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: <[email protected]>
> 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]