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.
Boa noite Gabriel.
Tente usar o DecimalFormat:
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.
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,
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.
2 curtidas
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.
public ArrayList<Produto> Listar(){
conex.Conectar();
conex.rs = null;
ArrayList<Produto> produtos = new ArrayList<>();
try {
PreparedStatement stmt = conex.con.prepareStatement("select * from produtos");
conex.rs = stmt.executeQuery();
while(conex.rs.next()){
Produto produto = new Produto();
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 (SQLException ex) {
Logger.getLogger(ClienteDAO.class.getName()).log(Level.SEVERE, null, ex);
}finally{
conex.Desconectar();
}
return produtos;
}
Conseguir Resolver usando o objeto NumberFormat. em baixo esta o codigo de como eu utilizei.
PreparedStatement stmt = conex.con.prepareStatement("select * from produtos");
conex.rs = stmt.executeQuery();
while(conex.rs.next()){
Produto produto = new Produto();
NumberFormat nf = 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);
Ó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!