Como fazer o Double aceitar a vírgula?

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
:stuck_out_tongue:

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;
	}
1 curtida

Aproveita e faz um testinho unitário (na verdade você tinha que ter feito isto ANTES do código… :slight_smile: )

[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.