Como fazer o Double aceitar a vírgula?

6 respostas
G

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:

6 Respostas

drsmachado

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.

G

Mas como eu faria isso?

L

bom não sei se vai funcionar, tenta dessa forma

javax.swing.text.MaskFormatter maskPrecoCD = null;     
 try{     
     maskPrecoCD = new javax.swing.text.MaskFormatter("#.###,##");     
    maskPrecoCD.setPlaceholderCharacter('_');     
         
 }     
 catch(java.text.ParseException exc){}
A

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;
	}
A
Aproveita e faz um testinho unitário (na verdade você tinha que ter feito isto ANTES do código... :) )
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.");
		}
	}
gomesrod

amhfilho:
Aproveita e faz um testinho unitário (…)

assertEquals(result, nc.converte("2,56"),0.001);


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.

Criado 16 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 6
Participantes 5