Como formato um campo float que deverá conter vírgula?

5 respostas
D
Encontrei um script que formata o campo ao digitar
function Limpar(valor, validos) {
// retira caracteres invalidos da string
var result = "";
var aux;
for (var i=0; i < valor.length; i++) {
aux = validos.indexOf(valor.substring(i, i+1));
if (aux>=0) {
result += aux;
}
}
return result;
}

//Formata número tipo moeda usando o evento onKeyDown

function Formata(campo,tammax,teclapres,decimal) {
var tecla = teclapres.keyCode;
vr = Limpar(campo.value,"[telefone removido]");
tam = vr.length;
dec=decimal

if (tam < tammax && tecla != 8){ tam = vr.length + 1 ; }

if (tecla == 8 )
{ tam = tam - 1 ; }

if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 )
{

if ( tam <= dec )
{ campo.value = vr ; }

if ( (tam > dec) && (tam <= 5) ){
campo.value = vr.substr( 0, tam - 2 ) + "," + 
vr.substr( tam - dec, tam ) ; }
if ( (tam >= 6) && (tam <= 8) ){
campo.value = vr.substr( 0, tam - 5 ) + "." + 
vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ; 
}
if ( (tam >= 9) && (tam <= 11) ){
campo.value = vr.substr( 0, tam - 8 ) + "." + 
vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + 
vr.substr( tam - dec, tam ) ; }
if ( (tam >= 12) && (tam <= 14) ){
campo.value = vr.substr( 0, tam - 11 ) + "." + vr.substr( tam - 11, 3 ) +
 "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," +
 vr.substr( tam - dec, tam ) ; }
if ( (tam >= 15) && (tam <= 17) ){
campo.value = vr.substr( 0, tam - 14 ) + "." + vr.substr( tam - 14, 3 ) +
 "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." +
 vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - 2, tam ) ;}
} 

}
chamada ao script:
* Preço:</td>
          <input type=text name="preco" value="" maxlength="10" 
           onKeydown="Formata(this,20,event,2)">

Aconte que quando vou cadastrar no banco de dados, utilizo o replace para pegar a vírgula e mudar para ponto. Acontece que se o usuário inserir um número milhar (100.00,00) o replace tenta tratar os pontos também e gera erro na inserção.

tratamento do form:
String sPreco;
float preco;

    sPreco = request.getParameter("preco");
    sPreco = sPreco.replace(",", ".");
    
try {
    preco = Float.valueOf(sPreco); 
    } catch(NumberFormatException nfex) {
        response.sendRedirect("cadastro_produtos.jsp?price_error");
        return;
     }

Como posso tratar a vírgula mas deixando os pontos como estão e inserir os
números em formato float no banco de dados corretamente?
Tanto faz, em javascript ou JSP, procuro uma solução pra isso.

Obrigado.

5 Respostas

wag_ferreira

Velho usa JSTL
Tem o format do jstl faz isto

wag_ferreira

http://www.guj.com.br/posts/list/21214.java

D

Mas isso é framework ou não?

Não estou utilizando nenhum framework, apenas JSP puro.

LPJava

dar uma olhada nisso

D

wag?.ferreira:
Velho usa JSTL
Tem o format do jstl faz isto

Vou dar uma olhada.

Mas taglib não precisa de um arquivo pra ser importado para a aplicação?

Alguns eu já importei mas e neste caso?

Criado 15 de novembro de 2008
Ultima resposta 27 de abr. de 2009
Respostas 5
Participantes 3