Porcentagem e formato moeda!

7 respostas
A

pessoal, so queria saber que metodo voces tem usado para exibir moedas...
prq assim, no BD qndo vou veruficar o registro gravado a moeda esta sende registrada sem valores decimais
R$=1,00 BD = 1
na MasterTable tambem apresenta = 1
mas qndo eh gravado assim
R$0,72 BD= 0,72
na MaterTable = 0,72

outra coisa eh que no meu projeto na parte de desconto, coloca-se um valor e ele abate esse valor do valor total da compra VALOR TOTAL (-) DECONTO (=) TOTAL GERAL. Porem esse valor eu gostaria que fosse em porcentagem(%) alguem poderia me sugerir algo
Double valorTotal = 0.00;                                        
    Double totalGeral = 0.00;
    Double totalTroco = 0.00;
    
    int index = masterTable.getSelectedRow();
    br.com.siscom.bean.VendaCab V = list.get(masterTable.convertRowIndexToModel(index));
    Collection<br.com.siscom.bean.VendaDet> vs = V.getVendaDetCollection();
    
    for (VendaDet vendaDet : vs) {
        if (vendaDet.getQtdeVendaDet()== null){
            vendaDet.setQtdeVendaDet(1);
        }
        vendaDet.setVlrTotalVendaDet(vendaDet.getVlrUnitVendaDet() * vendaDet.getQtdeVendaDet());
        
        valorTotal = valorTotal + vendaDet.getVlrTotalVendaDet();
        
    }
    if (jTextField11.getText().equals("")){
        jTextField11.setText("0");
    }
    if (jTextField14.getText().equals("")){
        jTextField14.setText("0");
    }
    totalGeral = valorTotal - Double.parseDouble(jTextField11.getText());
    jTextField10.setText(String.valueOf(valorTotal));
    jTextField12.setText(String.valueOf(totalGeral));
    {
    totalTroco = totalGeral - Double.parseDouble(jTextField14.getText());
    jTextField13.setText(String.valueOf(totalTroco));
       
    }

7 Respostas

E
import java.text.*;

class TesteFormat {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat ("#,##0.00%");
        System.out.println (df.format (0.1273));
        System.out.println (df.format (0.2356));
        System.out.println (df.format (0.7677));
        System.out.println (df.format (0.9998));
        System.out.println (df.format (1.2734));
// Imprime:
// 12,73%
// 23,56%
// 76,77%
// 99,98%
// 127,34%
    }
}
T

Sobre a persistencia de valores monetários, meses atrás vi uma discussão aqui no guj de que nunca devemos persistir valores decimais para moedas, isso gera imprecisão nos valores. O aconselhável é gravar tudo como inteiro, multiplicando o valor monetário por 100, ou seja, R$ 1,00 * 100 = 100, R$ 1,99 * 100 = 199, e assim por diante. E quando você for exibir esses valores basta dividi-los por 100 (199 / 100 = R$1,99). Qualquer operação que você faça com os valores vc deve trabalhar com inteiros também, deixando os valores como decimais somente para visualização.

Após ter utilizado esse conselho em meu projeto nunca mais tive problemas com imprecisões e arredondamentos errados em meu projeto.

A

como posso fazer isso? no meu BD tenho q mudar de “double” para inteiro correto? e depois no java?

renatosilva

Mesma coisa…

A

entao no meu BD deixo do mesmo jeito que esta, ok entendi…
mas e as jtextfield?
tentei de todos os modos mas nao axei o jeito.
prq se notarem tenho usado
double e nao sei como mudar depois, alguem poderia me dar uma ajuda?

A

resolvi mudar para jFormattedTextField porem sempre que perde o foco, os numeros somem, e depois qndo vou consultar os dados que estao gravados no banco de dados, o netbeans gera uma exception alguem pode me ajudar?

T

André, o que eu fiz foi criar uma rotina para tratar os valores que eu pego no BD e formata-los com o formato de moeda que irei exibir para os usuários. Para gravar no BD eu uma outra que faz o processo inverso, pega o valor digitado pelo usuário e transforma em inteiro. Não sei se é a melhor forma de se trabalhar, mas tem dado certo comigo.

Criado 17 de setembro de 2009
Ultima resposta 21 de set. de 2009
Respostas 7
Participantes 4