Galera eu gostaria de saber se alguém tem um micro exemplo de código pra me mostrar um double aceitando vírgula…
Fiz um programa de imc utilizando servlet e jsp mas queria que ele aceitasse a vírgula na altura e no peso…
Desde já muito grato
Não aceita.
O ideal é “mascarar” ou fazer a conversão na “unha” mesmo.
A máscara pode ser feita em javascript e, refeito quando há o submit.
Já a solução “no braço” consiste em pegar o valor como String, fazer um replace e aí converter para double.
Mas como eu faria isso?
bom não sei se vai funcionar, tenta dessa forma
[code] javax.swing.text.MaskFormatter maskPrecoCD = null;
try{
maskPrecoCD = new javax.swing.text.MaskFormatter("#.###,##");
maskPrecoCD.setPlaceholderCharacter(’_’);
}
catch(java.text.ParseException exc){} [/code]
Uma forma melhor de se fazer é usar NumberFormat
public double converte(String arg) throws ParseException{
//obtem um NumberFormat para o Locale default (BR)
NumberFormat nf = NumberFormat.getNumberInstance();
//converte um número com vírgulas ex: 2,56 para double
double number = nf.parse(arg).doubleValue();
return number;
}
Aproveita e faz um testinho unitário (na verdade você tinha que ter feito isto ANTES do código… )
[code]
public class NumberConversionTest {
private NumberConversion nc;
@Before
public void setUp() throws Exception {
nc = new NumberConversion();
}
@Test
public void testConverte() {
double result = 2.56;
try {
assertEquals(result, nc.converte("2,56"),0.001);
} catch (ParseException e) {
fail("Valor inválido.");
}
}[/code]
[quote=amhfilho]Aproveita e faz um testinho unitário (…)
assertEquals(result, nc.converte("2,56"),0.001);
[/quote]
Não pode se esquecer desses:
assertEquals(1234.56, nc.converte("1234,56"),0.001);
assertEquals(1234567.89, nc.converte("1.234.567,89"),0.001);
É importante testar todas as condições relevantes. Nesse caso já temos um exemplo em que a tradicional solução do “replace” falharia.