Ola a todos, bos tarde
Estou com um problema e preciso Corrigir a função que descreve os valores por extenso na minuta de um contrato.
Ou seja se Foi digitado 559 - Tenho que escrever “Quinhentos e cinquenta e nove” (Obs Por ser com porcentagem também)
Esta função já existe e esta funcionando em teste na própria classe na criação de um método main
(acho ate um problema simples de resolver rsrsrs) mais não estou conseguindo
O problema é que todos os Atributos que eu preciso estão como String, acho que preciso quebrar eles e montar o valor
Classe responsável pela função
package br.com.teste.teste.util;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
public class ValorExtenso {
private ArrayList<Integer> nro;
private BigInteger num;
private String Qualificadores[][] = { { "centesimo por cento", "centesimos por cento" },
{ "", "" }, { "mil", "mil" }, { "milhao", "milhoes" },
{ "bilhao", "bilhoes" }, { "trilhao", "trilhoes" },
{ "quatrilhao", "quatrilhoes" }, { "quintilhao", "quintilhoes" },
{ "sextilhao", "sextilhões" }, { "septilhao", "septilhoes" } };
private String Numeros[][] = {
{ "zero", "um", "dois", "tres", "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 ValorExtenso() {
nro = new ArrayList<Integer>();
}
/**
* Construtor
*
* @param dec
* valor para colocar por extenso
*/
public ValorExtenso(BigDecimal dec) {
this();
setNumber(dec);
}
/**
* Construtor para colocar o objeto por extenso
*
* @param dec
* valor para colocar por extenso
*/
public ValorExtenso(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<Integer> 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 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(" inteiro");
} else {
buf.append(" inteiros");
}
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();
}
public String toString(String number) {
if(number != null) number = number.replaceAll(",", ".");
setNumber(new BigDecimal(number));
StringBuffer buf = new StringBuffer();
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(" inteiro");
} else {
buf.append(" inteiros");
}
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
*
* @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 (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
*
* @param args
* numero a ser convertido
*/
public static void main(String[] args) {
Double value = 2.13;
ValorExtenso teste = new ValorExtenso(new BigDecimal(value));
System.out.println("Numero : " + (new DecimalFormat().format(Double.valueOf(value))));
System.out.println("Extenso : " + teste.toString());
}
}
Como esta sendo usada hoje (Acho que o erro esta nessa classe na hora estanciar a Construtor da classe “ValorExtenso”, provavelmente tenho que fazer outra coisa)
package br.com.teste.teste.template;
import java.util.ArrayList;
import br.com.teste.cjws.entity.AutorGeraHtml;
import br.com.teste.cjws.service.vo.GeraHTMLInVO;
import br.com.teste.cjws.util.ValorExtenso;
public class CJTemplate extends TemplateBase{
public CJTemplate() {
super("xxx/xx.vm");
}
public String gerarContratoJuridico(GeraHTMLInVO htmlInVO){
context.put("autores", htmlInVO.getContratos().getAutoresGeraHtml());
context.put("tituloObra", htmlInVO.getContratos().getTituloObra());
context.put("colecaoObra", htmlInVO.getContratos().getColecaoObra());
ArrayList<AutorGeraHtml> autores = new ArrayList<AutorGeraHtml>();
for(int i = 0; i< htmlInVO.getContratos().getAutoresGeraHtml().size(); i++){
AutorGeraHtml autor = htmlInVO.getContratos().getAutoresGeraHtml().get(i);
autores.add(autor);
}
context.put("dadosContas", autores);
context.put("valorExtenso", new ValorExtenso());
template.merge(context, writer);
return writer.toString();
}
}
Atributos geral da classe (Vou usar apenas o que se referem a “valor”)
package br.com.teste.teste.entity;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class AutorGeraHtml extends Autor implements Serializable {
/**
*
*/
@XmlTransient
private static final long serialVersionUID = -484881402483273046L;
@XmlElement(name = "posicaotitulardireito")
private String posicaotitulardireito;
@XmlElement(name = "titular")
private String titular;
@XmlElement(name = "numerocessionariotitular")
private String numerocessionariotitular;
@XmlElement(name = "valortipoedicao")
private String valortipoedicao;
@XmlElement(name = "valoredicaofixa")
private String valoredicaofixa;
@XmlElement(name = "descricaoremuneracao")
private String descricaoremuneracao;
@XmlElement(name = "valoradiantamento")
private String valoradiantamento;
@XmlElement(name = "numeroparcelas")
private String numeroparcelas;
@XmlElement(name = "valorparcelas")
private String valorparcelas;
@XmlElement(name = "dataprimeiraparcela")
private String dataprimeiraparcela;
@XmlElement(name = "periodo")
private String periodo;
@XmlElement(name = "datapagto")
private String datapagto;
@XmlElement(name = "numeroexemplares")
private String numeroexemplares;
@XmlElement(name = "percentuallicenciamentodigital")
private String percentuallicenciamentodigital;
@XmlElement(name = "percentuallicenciamentodigitalgoverno")
private String percentuallicenciamentodigitalgoverno;
@XmlElement(name = "percentualedicaodigital")
private String percentualedicaodigital;
// getters and setters
public String getPosicaotitulardireito() {
return posicaotitulardireito;
}
public void setPosicaotitulardireito(String posicaotitulardireito) {
this.posicaotitulardireito = posicaotitulardireito;
}
public String getTitular() {
return titular;
}
public void setTitular(String titular) {
this.titular = titular;
}
public String getNumerocessionariotitular() {
return numerocessionariotitular;
}
public void setNumerocessionariotitular(String numerocessionariotitular) {
this.numerocessionariotitular = numerocessionariotitular;
}
public String getValortipoedicao() {
return valortipoedicao;
}
public void setValortipoedicao(String valortipoedicao) {
this.valortipoedicao = valortipoedicao;
}
public String getValoredicaofixa() {
return valoredicaofixa;
}
public void setValoredicaofixa(String valoredicaofixa) {
this.valoredicaofixa = valoredicaofixa;
}
public String getDescricaoremuneracao() {
return descricaoremuneracao;
}
public void setDescricaoremuneracao(String descricaoremuneracao) {
this.descricaoremuneracao = descricaoremuneracao;
}
public String getValoradiantamento() {
return valoradiantamento;
}
public void setValoradiantamento(String valoradiantamento) {
this.valoradiantamento = valoradiantamento;
}
public String getNumeroparcelas() {
return numeroparcelas;
}
public void setNumeroparcelas(String numeroparcelas) {
this.numeroparcelas = numeroparcelas;
}
public String getValorparcelas() {
return valorparcelas;
}
public void setValorparcelas(String valorparcelas) {
this.valorparcelas = valorparcelas;
}
public String getDataprimeiraparcela() {
return dataprimeiraparcela;
}
public void setDataprimeiraparcela(String dataprimeiraparcela) {
this.dataprimeiraparcela = dataprimeiraparcela;
}
public String getPeriodo() {
return periodo;
}
public void setPeriodo(String periodo) {
this.periodo = periodo;
}
public String getDatapagto() {
return datapagto;
}
public void setDatapagto(String datapagto) {
this.datapagto = datapagto;
}
public String getNumeroexemplares() {
return numeroexemplares;
}
public void setNumeroexemplares(String numeroexemplares) {
this.numeroexemplares = numeroexemplares;
}
public String getPercentuallicenciamentodigital() {
return percentuallicenciamentodigital;
}
public void setPercentuallicenciamentodigital(
String percentuallicenciamentodigital) {
this.percentuallicenciamentodigital = percentuallicenciamentodigital;
}
public String getPercentuallicenciamentodigitalgoverno() {
return percentuallicenciamentodigitalgoverno;
}
public void setPercentuallicenciamentodigitalgoverno(
String percentuallicenciamentodigitalgoverno) {
this.percentuallicenciamentodigitalgoverno = percentuallicenciamentodigitalgoverno;
}
public String getPercentualedicaodigital() {
return percentualedicaodigital;
}
public void setPercentualedicaodigital(String percentualedicaodigital) {
this.percentualedicaodigital = percentualedicaodigital;
}
@Override
public String toString() {
return "Autor [idAutor=" + super.getIdAutor() + ", nomeCompleto=" + super.getNomeCompleto()
+ ", pseudonimo=" + super.getPseudonimo() + ", cnpjCpf=" + super.getCnpjCpf()
+ ", ie=" + super.getIe() + ", logradouro=" + super.getLogradouro() + ", numero="
+ super.getNumero() + ", bairro=" + super.getBairro() + ", complemento="
+ super.getComplemento() + ", cidade=" + super.getCidade() + ", uf=" + super.getUf() + ", cep="
+ super.getCep() + ", email=" + super.getEmail() + ", nomeBanco=" + super.getNomeBanco()
+ ", numeroConta=" + super.getNumeroConta() + ", numeroAgencia="
+ super.getNumeroAgencia() + ", percentualdireitoautoral="
+ super.getPercentualdireitoautoral()
+ ", percentuallicenciamentodigital="
+ percentuallicenciamentodigital
+ ", percentuallicenciamentodigitalgoverno="
+ percentuallicenciamentodigitalgoverno
+ ", percentualedicaodigital=" + percentualedicaodigital + "]";
}
}