Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BS Computadores

Problema com virgula

Recommended Posts

Bom Dia,

o problema é o seguinte, criei um script para uma pessoa poder calcular o valor que ela vai pagar de imposto em cima de um valor, o unico problema é que se a pessoa usar "," (virgula) no valor (por exemplo R$ 2300,56), o calculo fica errado, mas se a pessoa usar "." (ponto) o calculo fica certo. logo abaixo vai o codigo fonte do script e tambem parte do formulario que utilizo para passar o valor para o script.

 

Código do Script

 

function calculo(valor){

	if ( valor.nota.value=="" ){
			alert('Por favor, preencha todos os campos com valores.');
			return false;
     } else {
		 nf=parseFloat(valor.nota.value);
		 prolabore=parseFloat(valor.labore.value);
		 folha=parseFloat(valor.folhamensal.value);
		 salarios=prolabore+folha;
		 aliquotairpj=parseFloat(valor.pirpj.value);
		 aliquotaissqn=parseFloat(valor.pissqn.value);
		 aliquotairpj=aliquotairpj/100;
		 aliquotaissqn=aliquotaissqn/100;
		 irpj=nf*aliquotairpj;
		 csll=nf*0.0288;
		 cofins=nf*0.03;
		 pis=nf*0.0065;
		 issqn=nf*aliquotaissqn;
		 insss=prolabore*0.11;
		 inssf=folha*0.08;
		 fgts=folha*0.08;
		 inssp=salarios*0.285;
		 totaltributos=irpj+csll+cofins+pis+issqn+insss+inssp+inssf+fgts;
		 faturamento=nf-(totaltributos+folha);
		 airpj=irpj.toFixed(2);
		 acsll=csll.toFixed(2);
		 acofins=cofins.toFixed(2);
		 apis=pis.toFixed(2);
		 aissqn=issqn.toFixed(2);
		 afgts=fgts.toFixed(2);
		 ainsss=insss.toFixed(2);
		 ainssf=inssf.toFixed(2);
		 ainssp=inssp.toFixed(2);
		 atotaltributos=totaltributos.toFixed(2);
		 afaturamento=faturamento.toFixed(2);
		 valor.rir.value=airpj;
		 valor.rcsll.value=acsll;
		 valor.rcofins.value=acofins;
		 valor.rpis.value=apis;
		 valor.rissqn.value=aissqn;
		 valor.rinsss.value=ainsss;
		 valor.rinssf.value=ainssf;
		 valor.rinssp.value=ainssp;
		 valor.rfgts.value=afgts;
		 valor.rtotaltributos.value=atotaltributos;
		 valor.rfaturamento.value=afaturamento;
    }
}

Código do formulario do arquivo html

 

<form method="POST" name="calculodentasfiscaisdeservico" class="bord">
              <table width="100%" border="0">
                <tr> 
                  <td width="50%" align="right"><span class="style27">Valor da Nota Fiscal:</span></td>
                  <td width="50%" align="left"><span class="style27">R$ </span><input type="text" name="nota" size="7" class="style28"></td>
                </tr>
                <tr> 
                  <td width="50%" align="right"><span class="style27">Pro-Labore:</span></td>
                  <td width="50%" align="left"><span class="style27">R$ </span><input type="text" name="labore" size="7" class="style28"></td>
                </tr>
                <tr> 
                  <td width="50%" align="right"><span class="style27">Folha de Pagamento (Funcionários):</span></td>
                  <td width="50%" align="left"><span class="style27">R$ </span><input type="text" name="folhamensal" size="7" class="style28"></td>
                </tr>
                <tr> 
                  <td width="50%" align="right"><span class="style27">Alíquota do IRPJ (4.88):</span></td>
                  <td width="50%" align="left"><input type="text" name="pirpj" size="7" class="style28"><span class="style27">%</span></td>
                </tr>
                  <td width="50%" align="right"><span class="style27">Alíquota do ISSQN:</span></td>
                  <td width="50%" align="left"><input type="text" name="pissqn" size="7" class="style28"><span class="style27">%</span></td>
                </tr>
              </table>
              <table width="100%" border="0">
                <tr> 
                  <td width="100%" align="center"><input type="button" value="Calcular" onClick="calculo(document.calculodentasfiscaisdeservico); return false;" class="style19"></td>
                </tr>
              </table>
              <table width="100%" border="0">
                <tr>
                  <td width="50%" align="right"><span class="style27">IRPJ: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rir" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">CSLL: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rcsll" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">COFINS: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rcofins" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">PIS: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rpis" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">ISSQN: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rissqn" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">INSS Sócios: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rinsss" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">INSS Funcionários: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rinssf" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">INSS Patronal: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rinssp" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">FGTS: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rfgts" size="7" class="style28"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">Total dos Tributos: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rtotaltributos" size="7" class="style30"></td>
                </tr>
                <tr>
                  <td width="50%" align="right"><span class="style27">Serviço Líquido: R$ </span></td>
                  <td width="50%" align="left"><input type="text" name="rfaturamento" size="7" class="style29"></td>
                </tr>
            </table>
          </form>

Se alguém poder me ajudar eu fico grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valor.nota.value.replace(",",".");

nf=parseFloat(valor.nota.value);

 

adicione essa primeira linha, no seu código, ele ira transformar suas virgulas por ponto, e ira funcionar ou senão faça

valor.nota.value.replace(",","");

que ira transformar as virgulas em nada, para poder calcular melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilizar replace como o João Vitor mencionou acima é a saída realmente.

 

JavaScript trabalha com ponto-flutuante, e não com vírgula-flutuante. Algumas vezes me esqueci disso e apanhei do código... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

valor.nota.value.replace(",",".");

nf=parseFloat(valor.nota.value);

 

adicione essa primeira linha, no seu código, ele ira transformar suas virgulas por ponto, e ira funcionar ou senão faça

valor.nota.value.replace(",","");

que ira transformar as virgulas em nada, para poder calcular melhor.

 

Não deu certo, coloquei o código e mesmo assim continua calculando errado. vai ai logo abaixo o codigo do script com o comando citado pelo João.

function calculo(valor){

	if ( valor.nota.value=="" ){
			alert('Por favor, preencha todos os campos com valores.');
			return false;
     } else {
		 valor.nota.value.replace(",","");
		 valor.pirpj.value.replace(",","");
		 valor.pissqn.value.replace(",","");
		 valor.labore.value.replace(",","");
		 valor.folhamensal.value.replace(",","");
		 nf=parseFloat(valor.nota.value);
		 prolabore=parseFloat(valor.labore.value);
		 folha=parseFloat(valor.folhamensal.value);
		 salarios=prolabore+folha;
		 aliquotairpj=parseFloat(valor.pirpj.value);
		 aliquotaissqn=parseFloat(valor.pissqn.value);
		 aliquotairpj=aliquotairpj/100;
		 aliquotaissqn=aliquotaissqn/100;
		 irpj=nf*aliquotairpj;
		 csll=nf*0.0288;
		 cofins=nf*0.03;
		 pis=nf*0.0065;
		 issqn=nf*aliquotaissqn;
		 insss=prolabore*0.11;
		 inssf=folha*0.08;
		 fgts=folha*0.08;
		 inssp=salarios*0.285;
		 totaltributos=irpj+csll+cofins+pis+issqn+insss+inssp+inssf+fgts;
		 faturamento=nf-(totaltributos+folha);
		 airpj=irpj.toFixed(2);
		 acsll=csll.toFixed(2);
		 acofins=cofins.toFixed(2);
		 apis=pis.toFixed(2);
		 aissqn=issqn.toFixed(2);
		 afgts=fgts.toFixed(2);
		 ainsss=insss.toFixed(2);
		 ainssf=inssf.toFixed(2);
		 ainssp=inssp.toFixed(2);
		 atotaltributos=totaltributos.toFixed(2);
		 afaturamento=faturamento.toFixed(2);
		 valor.rir.value=airpj;
		 valor.rcsll.value=acsll;
		 valor.rcofins.value=acofins;
		 valor.rpis.value=apis;
		 valor.rissqn.value=aissqn;
		 valor.rinsss.value=ainsss;
		 valor.rinssf.value=ainssf;
		 valor.rinssp.value=ainssp;
		 valor.rfgts.value=afgts;
		 valor.rtotaltributos.value=atotaltributos;
		 valor.rfaturamento.value=afaturamento;
    }
}
Já até tentei colocando valor.nomedavariavel.value.replace(",",".");

 

se quiserem testar a página, o endereço é http://escritoriobrum.com.br/escritorio/cnfs/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O link abaixo direciona para um tópico no qual foi discutido a conversão de ponto para vírgula, em virtude da necessidade de uma conta matemática:

 

O código já está comentado:

http://forum.imasters.com.br/index.php?/topic/352381-problema-com-somar-de-valores-javascript/

 

Obs: Utilizei expressão regular nesse caso, mas você pode fazer da maneira que quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara entrei no link que você mandou, calculei usando ',' separando os valores e funcionou.

 

mas tu utilizou depois com "."(ponto)?, pois o calculo faz, porem da diferença de valores utilizando virgula, ou seja, com virgula o resultado da a menor, se fosse para maior dai tudo bem, pois é melhor da um resultado a maior e na hora pagar o valor seja a menor do que ao contrario.

 

E eu estou testando no Firefox, não fiz ainda o teste no Internet Explorer.

 

E o problema maior esta no campo "Alíquota do IRPJ (4.88)" e "Alíquota do ISSQN", se utiliza a virgula, o resultado da uma diferença enorme utilizando virgula. Ja o campo "Valor da Nota Fiscal" a diferença fica em no máximo 4 centavos, mas dai não é um pois diferença em no máximo 4 centavos o cliente não berra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu ultilizei deopis com ponto, que no caso tiro todas as virgulas e pontos entendeu, essa função formata seu valor

tipo se você quiser tirar as virgulas e por traços é valor.nota.value.replace(',','-');

entende, a função faz o que você precisa, você precisa conhecer bem seu código para saber qual a melhor maneira de implementar a função, vai dando alert pra testar os valores que você ta comparando e tal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara eu ultilizei deopis com ponto, que no caso tiro todas as virgulas e pontos entendeu, essa função formata seu valor

tipo se você quiser tirar as virgulas e por traços é valor.nota.value.replace(',','-');

entende, a função faz o que você precisa, você precisa conhecer bem seu código para saber qual a melhor maneira de implementar a função, vai dando alert pra testar os valores que você ta comparando e tal.

 

Ainda não deu certo, vai ai o print screen no final onde aparece o valor errado, na imagem vejam que no campo "Alíquota do IRPJ (4.88)" eu botei 4,88 e o resultado que fica no campo "IRPJ" aparece 360.00 e o correto seria 439.21 e o mesmo acontece no campo "Alíquota do ISSQN" que eu coloquei 2,75 e o resultado que fica no campo "ISSQN" aparece 180.00 e o correto seria 247.51.

Será que ainda tem alguma solução???

 

 

Imagem Postada

 

Código do Script:

function calculo(valor){

	if ( valor.nota.value=="" ){
			alert('Por favor, preencha todos os campos com valores.');
			return false;
     } else {
		 valor.nota.value.replace(',','.');
		 valor.pirpj.value.replace(',','.');
		 valor.pissqn.value.replace(',','.');
		 valor.labore.value.replace(',','.');
		 valor.folhamensal.value.replace(',','.');
		 nf=parseFloat(valor.nota.value);
		 prolabore=parseFloat(valor.labore.value);
		 folha=parseFloat(valor.folhamensal.value);
		 salarios=prolabore+folha;
		 aliquotairpj=parseFloat(valor.pirpj.value);
		 aliquotaissqn=parseFloat(valor.pissqn.value);
		 aliquotairpj=aliquotairpj/100;
		 aliquotaissqn=aliquotaissqn/100;
		 irpj=nf*aliquotairpj;
		 csll=nf*0.0288;
		 cofins=nf*0.03;
		 pis=nf*0.0065;
		 issqn=nf*aliquotaissqn;
		 insss=prolabore*0.11;
		 inssf=folha*0.08;
		 fgts=folha*0.08;
		 inssp=salarios*0.285;
		 totaltributos=irpj+csll+cofins+pis+issqn+insss+inssp+inssf+fgts;
		 faturamento=nf-(totaltributos+folha);
		 airpj=irpj.toFixed(2);
		 acsll=csll.toFixed(2);
		 acofins=cofins.toFixed(2);
		 apis=pis.toFixed(2);
		 aissqn=issqn.toFixed(2);
		 afgts=fgts.toFixed(2);
		 ainsss=insss.toFixed(2);
		 ainssf=inssf.toFixed(2);
		 ainssp=inssp.toFixed(2);
		 atotaltributos=totaltributos.toFixed(2);
		 afaturamento=faturamento.toFixed(2);
		 valor.rir.value=airpj;
		 valor.rcsll.value=acsll;
		 valor.rcofins.value=acofins;
		 valor.rpis.value=apis;
		 valor.rissqn.value=aissqn;
		 valor.rinsss.value=ainsss;
		 valor.rinssf.value=ainssf;
		 valor.rinssp.value=ainssp;
		 valor.rfgts.value=afgts;
		 valor.rtotaltributos.value=atotaltributos;
		 valor.rfaturamento.value=afaturamento;
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.