Java como deixar o double para pegar 150.00 e não 150,0?

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()));