Formatação de moeda para salvar no banco de dados como DECIMAL
6 respostasResolvido
postgresqlprogramaçãojava
G
Gabriel_Barreto
Galera estou criando uma aplicação e estou querendo que quando o usuário digite o salario do funcionário
ex: 315487 mas quando fosse pro banco ficasse ex: 3.154,87, e em outro caso estou fazendo uma multiplicação da quantidade de produtos vezes o valor unitário de cada produto
exe: qtd = 20; valorUnitario = 599.99; valorTotal = qtd * valorUnitario;
Quando estou enviando pro banco fica assim valorTotal = 11999.8. queria que ficasse com as casas decimais certinha tipo valorTotal = 11.999,8.
Alguem pode me ajudar como resolver este problema?
minha aplicação é usando o JavaFX e o Banco de Dados é o PostGresql.
DecimalFormat df = new DecimalFormat(",000.00");
‘o seu código para enviar para o BD’ = (df.format(suavariavelcomovalor));
Lembrando que o formato no código realmente é com , e para centavos . por que o Java inverte na execução.
R
rcarvalhoalencar
Lembrando que se depois quiser manipular o valor pegando-o do BD deve usar o .replace(".","").replace(",",".")
Para tirar o ponto e transformar a virgula em ponto, pois se não o JAVA não vai reconhecer como float/double.
Qualquer dúvida é so postar,
J
Jonathan_Medeiros2 likes
Está correto dessa forma, a formatação não se armazena em banco de dados, armazenar dados formatados é uma má prática, formatação de dados se faz na aplicação somente pra apresentar para o usuário de uma forma mais amigável.
G
Gabriel_Barreto
boa noite Alencar, gostaria de saber onde implemento essa função replace para puxar os dados do meu DB e jogar na minha tabela na interface com os dados formatados.
abaixo está o código de como eu estou puxando os dados do DB.
publicArrayList<Produto>Listar(){conex.Conectar();conex.rs=null;ArrayList<Produto>produtos=newArrayList<>();try{PreparedStatementstmt=conex.con.prepareStatement("select * from produtos");conex.rs=stmt.executeQuery();while(conex.rs.next()){Produtoproduto=newProduto();produto.setIdP(conex.rs.getInt("id"));produto.setDescricao(conex.rs.getString("descricao"));produto.setCategoria(conex.rs.getString("categoria"));produto.setUnidade(conex.rs.getString("unidade"));produto.setQuantidade(conex.rs.getInt("quantidade"));produto.setValorUnd(conex.rs.getDouble("valorund"));produto.setValorTotal(conex.rs.getDouble("valortotal"));produtos.add(produto);}}catch(SQLExceptionex){Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE,null,ex);}finally{conex.Desconectar();}returnprodutos;}
G
Solucao aceita
Gabriel_Barreto
Conseguir Resolver usando o objeto NumberFormat. em baixo esta o codigo de como eu utilizei.
PreparedStatementstmt=conex.con.prepareStatement("select * from produtos");conex.rs=stmt.executeQuery();while(conex.rs.next()){Produtoproduto=newProduto();NumberFormatnf=NumberFormat.getInstance();produto.setIdP(conex.rs.getInt("id"));produto.setDescricao(conex.rs.getString("descricao"));produto.setCategoria(conex.rs.getString("categoria"));produto.setUnidade(conex.rs.getString("unidade"));produto.setQuantidade(conex.rs.getInt("quantidade"));produto.setValorUnd(conex.rs.getDouble("valorund"));produto.setValorTotal(String.valueOf(nf.format(conex.rs.getDouble("valortotal"))));produtos.add(produto);
R
rcarvalhoalencar
Ótimo. Mas respondendo a sua pergunta:
DecimalFormat df = new DecimalFormat(",000.00"); pst.setString(“1”,df.format(suavariavelcomovalor)); // Implementa na hora de mandar pro BD.
Mas como o colega Jonathan falou isso vai dar mais trabalho quando for buscar o valor no BD. O certo é deixar sem formatar no BD e formatar só quando for imprimir na tela.
Lhe ensinei desse modo apenas para que você pudesse sanar sua dúvida. Forte abraço!