Boas. Tenho um problema no meu programa de gestão de stocks. Ao adicionar um produto, que tem um preço sem IVA, um IVA e um preço com IVA, fiz de maneira a que o preço com IVA é calculado automaticamente ao ser inserido o preço de compra juntamente com o IVA. Assim, se eu modificar o preco de compra, o preço de venda vai aparecer imediatamente calculado. Até aqui, tudo bem. Mas e se o utilizador se enganar e, sem querer, carregar duas vezes na vírgula, o programa dá o tilt. Então a pergunta é: Como é que eu faço para "prevenir" a introdução de uma vírgula ou um ponto final a mais? Desde já, obrigado.
Código: valor = replace(valor, "..", ".") deve ser isto cumps edit: se quiseres uma coisa mais complexa(este está em javascript mas traduzes facilmente): Código: function moneyFormat(textObj) { var newValue = textObj.value; var decAmount = ""; var dolAmount = ""; var decFlag = false; var aChar = ""; // ignorar todos os caracteres excepto numeros e pontos decimais for(i=0; i < newValue.length; i++) { aChar = newValue.substring(i,i+1); if(aChar >= "0" && aChar <= "9") { if(decFlag) { decAmount = "" + decAmount + aChar; } else { dolAmount = "" + dolAmount + aChar; } } if(aChar == ".") { if(decFlag) { dolAmount = ""; break; } decFlag=true; } } // assegurar que pelo menos aparece zero(0) no valor do preco if(dolAmount == "") { dolAmount = "0"; } // remover zeros a esquerda if(dolAmount.length > 1) { while(dolAmount.length > 1 && dolAmount.substring(0,1) == "0") { dolAmount = dolAmount.substring(1,dolAmount.length); } } //arredondar decimais para 2 casas decimais if(decAmount.length > 2) { if(decAmount.substring(2,3) > "4") { decAmount = parseInt(decAmount.substring(0,2)) + 1; if(decAmount < 10) { decAmount = "0" + decAmount; } else { decAmount = "" + decAmount; } } else { decAmount = decAmount.substring(0,2); } if (decAmount == 100) { decAmount = "00"; dolAmount = parseInt(dolAmount) + 1; } } // aplicar 2 casa decimais if(decAmount.length == 1) { decAmount = decAmount + "0"; } if(decAmount.length == 0) { decAmount = decAmount + "00"; } // verificar por valores negativos e actualizar valor do textBbj if(newValue.substring(0,1) != '-' || (dolAmount == "0" && decAmount == "00")) { textObj.value = dolAmount + "." + decAmount; } else{ textObj.value = '-' + dolAmount + "." + decAmount; } }
se dá problemas ao inserir duas virgulas, então provavelmente também dá ao escrever letras, ou qualquer outro caracter que não seja numerico, por isso a solução do armadillo não serve de muito já não me lembro de nada de VB, mas presumo que tenha uma função para verificar se o valor é numerico. se não for numérico basta informar o utilizador e se necessário apagar automaticamente o campo EDIT: 2 minutos a escrever este post e já mudaram isto tudo
Até podia ser uma verificação... Se o numero introduzido não fosse decimal, ou double, saía do sub... Desculpem lá a pergunta noob, mas o que faz exactamente o double.tryparse? PS: Os meus conhecimentos são muuuito limitados... 4 meses de aulas de Visual Basic) não chegaram para nada...
percorres o texto e contas as virgulas.. se o numero de virgulas for > 1 metes isso a dar um erro ... tambem podes fazer com uma expressao regular... (nao sei as sintaxes de cor.. mas nao e dificil) e so dizer que o texto tem de ter "digitos" ou "digitos , digitos"