Tenho um campo formatado na seguinte mascara R$ 0,00 onde depois eu dou um replace na virgula. E gostaria quando usuario informasse o valor por exemplo 80,00 gravasse no banco 80,00 e não 80,0
segue meu código onde esta setando no objeto para depois salvar
Servico s = new Servico();
s.setValor(Double.valueOf(txtValor.getText()
.replaceAll("R|\\$|", "")
.replaceAll(",", ".")));
1 curtida
Se isso for valor monetário, não use double, pois não garante precisão. Vai depender do banco de dados, no Oracle por exemplo o certo é usar NUMBER e no PostgreSql NUMERIC ou DECIMAL. Em relação ao Java, dá uma pesquisada: Melhor tipo de dado para valores monetários
E dependendo do front-end que estiver usando não precisa fazer gambiarras de replace.
1 curtida
É possível fazer da seguinte forma:
String dinheiroString = "150,00";
DecimalFormat format = new DecimalFormat("#,##0.00");
try {
Number parse = format.parse(dinheiroString);
double novoDinheiro = parse.doubleValue();
} catch (ParseException e) {
e.printStackTrace();
}
Espero que te ajude.
1 curtida
Da uma procurada a respeito do componente jNumberField
, ele é um componente próprio para se trabalhar com valores monetários, o mesmo já possui a formatação: R$ 0,00
Ao pegar o valor do mesmo bastaria fazer:
servico.setValor(jNumberField.getValue().doubleValue());
- Valor Digitado no campo: R$ 150,00
- Valor Resgatado: 150.00
Para devolver o valor ao campo bastaria fazer:
jNumberField.setValue(new BigDecimal(servico.getValor()));
- Valor Resgatado: 150.00
- Valor Impresso no campo: R$ 150,00
1 curtida
Já consegui resolver galera valeu pelas dicas usei a seguinte forma
txtValor.setValue(new BigDecimal(s.getValor()));