Olá pessoal, estou com um problema, fiz um formulário para o usuário digitar um valor e depois mandar esse valor com o hibernate para o banco de dados.
Mas tem um problema, só funciona se digitar por ex: 25.00 e não 25,00. Como faço para transformar essa vírgula em . antes de enviar para o banco de dados?
E também outra dúvida, quando envio por exemplo 25.00, ele insere 25.0 no banco de dados, como faço para mudar isso?
Você precisa fazer parsing da string para um tipo numérico. Algo assim:
NumberFormat format = DecimalFormat.getInstance();
Number number = format.parse("1,23");
System.out.println(number);
Aí você persiste number. Caso seu formato de número seja diferente, você pode especificar no NumberFormat. Mas pelo que você passou, é isto mesmo.
d34d_d3v1l
eu faço um replace:
String num = "1,5";
double number = Double.parseDouble(num.replace(",","."));
davidbuzatto
O código do wagnerfrancisco vai funcionar pq o método format é sensível ao locale da máquina em que a aplicação está rodando.
Se rodar em uma máquina com o locale americano por exemplo, vai dar problema (acho que uma NumberFormatException).
Para ter certeza que vai funcionar, force o locale do NumberFormatter.
Outra coisa. O banco vai gravar como 25.0 pois essa é a representação interna de um número em decimal e você, definitivamente, não precisa se preocupar com isso.
sergio8
Eu não entendo o lance de transformar a String em um double, porque se eu não me engano o Springs já passa o campo “valor” como um double para o controlador e depois para o dao.
public void cadastrar(Conta conta) {
this.session.save(conta);
}
Agora sobre o dois zeros do 25,00, é porque quero listar como um valor, só que quando eu listo no site, aparece somente um zero.
Obrigado a todos pelas respostas.
wagnerfrancisco
davidbuzatto:
O código do wagnerfrancisco vai funcionar pq o método format é sensível ao locale da máquina em que a aplicação está rodando.
Se rodar em uma máquina com o locale americano por exemplo, vai dar problema (acho que uma NumberFormatException).
Para ter certeza que vai funcionar, force o locale do NumberFormatter.
Outra coisa. O banco vai gravar como 25.0 pois essa é a representação interna de um número em decimal e você, definitivamente, não precisa se preocupar com isso.
Realmente, a solução que postei depende do Locale da máquina. Fosse uma aplicação desktop internacionalizável até justificaria usar o locale da máquina. :twisted:
wagnerfrancisco
Tu não falou que tava usando Spring. Creio que o conversor do Spring não considera o Locale pra converter. Você pode registrar um converter customizado, algo assim:
Você pode formatar o valor registrando um formatador customizado. O procedimento é semelhante a este que lhe passei.
davidbuzatto
Ai, por uma infelicidade do destino, a aplicação dele vai parar em uma máquina configurada com outro locale. Boom, NumberFormatException.
E
entanglement
Ai, por uma infelicidade do destino, a aplicação dele vai parar em uma máquina configurada com outro locale. Boom, NumberFormatException.
É muito comum aplicações em Spring serem deployadas em máquinas Linux que estão configuradas com a linguagem = inglês americano, até por uma questão de costume (muita gente não se sente à vontade com mensagens do sistema operacional ou do banco de dados em português, porque é mais difícil achar essas mensagens na Internet ou então em algum manual impresso, que normalmente vem em inglês mesmo.)
wagnerfrancisco
Ai, por uma infelicidade do destino, a aplicação dele vai parar em uma máquina configurada com outro locale. Boom, NumberFormatException.
Tem razão, melhor não usar o locale da máquina mesmo…