API para valores em extenso em diversos idiomas

Galera,

Alguém conhece uma API onde eu possa obter valores por extenso em diversoso idiomas?

Valores por extenso em dolares, Euros, Reais e etc…

Preciso de uma API que faça isto, caso contrario terei que criar algo.
Como não é cultura javanesa, não quero reinventar nada.

Agradeço a todos que puderem colaborar com algo.

Abraços a todos!!

Alguém ao menos sabe onde posso encontrar uma classe para valores extenso em EUROS e DOLARES??

caramba!!

Este forum está fraquissimo!!
Pedi ajuda para webservices e ninguem sabe nada!
Pedi ajuda sobre classes por extenso e nada!

Ô galera! vamu acorda, vamu acordá!!

Java não é só Struts e Hibernate não!!

Como você deve saber, isso aqui é um fórum. Portanto o pessoal que costuma ajudar faz isso nas horas vagas (isso existe ? :lol:). Se ninguém respondeu é porque talvez ninguém saiba.

Agora quanto a: “Java não é só Struts e Hibernate não!!”

Quem te disse que o pessoal que frequenta o PJ usa somente Struts e Hibernate ?

Uma simples pesquisa pode tornar as coisas mais fáceis:

[code]/**

  • @author Desconhecido
  • Classe para escrever um valor por extenso
    */
    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
*
*@param dec valor para colocar por extenso
*/
public Extenso(BigDecimal dec) {
this();
setNumber(dec);
}

/**
* Construtor para colocar o objeto por extenso
*
*@param dec valor para colocar por extenso
*/
public Extenso(double dec) {
this();
setNumber(dec);
}

/**
* Setando o atributo do número para colocá-lo por extenso
*
*@param dec Novo valor para o Número
*/
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));
}

/**
* Descrição do Método
*/
public void show() {
Iterator valores = nro.iterator();

  while (valores.hasNext()) {
     System.out.println(((Integer) valores.next()).intValue());
  }
  System.out.println(toString());

}

/**
* Descrição do Método
*
*@return Descrição do Valor Retornado
*/
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
*
*@param 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];

}

/**
* Descrição do Método
*
*@param ps Descrição do Parâmetro
*@return Descrição do Valor Retornado
*/
private boolean temMaisGrupos(int ps) {
for (; ps > 0; ps–) {
if (((Integer) nro.get(ps)).intValue() != 0) {
return true;
}
}

  return false;

}

/**
* Descrição do Método
*
*@param ps Descrição do Parâmetro
*@return Descrição do Valor Retornado
*/
private boolean ehUltimoGrupo(int ps) {
return (ps > 0) && ((Integer)nro.get(ps)).intValue() != 0 && !temMaisGrupos(ps - 1);
}

/**
* Descrição do Método
*
*@return Descrição do Valor Retornado
*/
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;
}

/**
* Descrição do Método
*
*@param numero Descrição do Parâmetro
*@param escala Descrição do Parâmetro
*@return Descrição do Valor Retornado
/
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 &#40;numero != 0&#41; &#123;
     if &#40;centena != 0&#41; &#123;
        if &#40;dezena == 0 &amp;&amp; centena == 1&#41; &#123;
           buf.append&#40;Numeros&#91;2&#93;&#91;0&#93;&#41;;
        &#125;
        else &#123;
           buf.append&#40;Numeros&#91;2&#93;&#91;centena&#93;&#41;;
        &#125;
     &#125;

     if &#40;&#40;buf.length&#40;&#41; &gt; 0&#41; &amp;&amp; &#40;dezena != 0&#41;&#41; &#123;
        buf.append&#40;&quot; e &quot;&#41;;
     &#125;
     if &#40;dezena &gt; 19&#41; &#123;
        dezena /= 10;
        buf.append&#40;Numeros&#91;1&#93;&#91;dezena - 2&#93;&#41;;
        if &#40;unidade != 0&#41; &#123;
           buf.append&#40;&quot; e &quot;&#41;;
           buf.append&#40;Numeros&#91;0&#93;&#91;unidade&#93;&#41;;
        &#125;
     &#125;
     else if &#40;centena == 0 || dezena != 0&#41; &#123;
        buf.append&#40;Numeros&#91;0&#93;&#91;dezena&#93;&#41;;
     &#125;

     buf.append&#40;&quot; &quot;&#41;;
     if &#40;numero == 1&#41; &#123;
        buf.append&#40;Qualificadores&#91;escala&#93;&#91;0&#93;&#41;;
     &#125;
     else &#123;
        buf.append&#40;Qualificadores&#91;escala&#93;&#91;1&#93;&#41;;
     &#125;
  &#125;

  return buf.toString&#40;&#41;;

}

/**
* Para teste
*
*@param args numero a ser convertido
*/
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("Sintax : …Extenso <numero>");
return;
}
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());
}
}[/code]

http://www.mail-archive.com/java-list@soujava.org.br/msg37102.html

Fica me devendo uma tota-tola :wink:

Guilherme!

agradeço sua ajuda, mas para converte em Reais eu já tenho.
Preciso de uma API que faça este trabalho em varios idiomas, de preferência em Dolar e Euros.

Já pesquisei igual louco e não encontrei!

Não é possivel que ainda não criaram isto!

VALEU!!!

Se tiver mais algum desesperado por aí necessitando da mesma funcionalidade, vejam o link que encontrei na net:

http://www.rgagnon.com/javadetails/java-0426.html

AINDA PROCURO UM API PARA ISTO!!!

Alguém já ouviu falar de uma tal de BEYOUND JDK 1.1 ???

Parece que ela faz exatamente o que quero, mas o link está em manutenção

afff!!!

Vou ter que tirar leite da pedra!!

Já consegui fazer a classe para REAIS e DOLARES!

Só falta EUROS e outras moedas.

Alguém pode contribuir com algo??