1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

VB2005: Vírgula/ponto final a mais

Discussão em 'Programação' iniciada por redshot, 8 de Maio de 2008. (Respostas: 7; Visualizações: 1163)

  1. redshot

    redshot Electromoderator
    Staff Member

    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.
     
  2. Armadillo

    Armadillo Folding Member

    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;
       }
    }
    
     
    Última edição: 8 de Maio de 2008
  3. redshot

    redshot Electromoderator
    Staff Member

    Mas se introduzir por exemplo 14,34,6 já não dá...
     
  4. MPalhas

    MPalhas Power Member

    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 :lol:
     
  5. jpaulino

    jpaulino Power Member

    Então mas é winforms ou asp.net ?
     
  6. redshot

    redshot Electromoderator
    Staff Member

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

    viskonde I quit My Job for Folding

    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"
     

Partilhar esta Página