Ir para conteúdo

POWERED BY:

Arquivado

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

Bart

!!! desafio !!!

Recommended Posts

Galera, o lance é o seguinte:

 

Eu tenho uma função muito simples de subtração de dois valores, mas o JavaScript NÃO CONSEGUE FAZER A CONTA CERTA de jeito nenhum.

Já tentei tudo, e não consegui descobrir o erro.....

 

Será que alguém aí se habilita a tentar me ajudar?

 

 

Tô mandando o código.

O que eu quero é recuperar a parte decimal do número, e guardar em uma variável.

Mas todo número (com duas casas decimais) que eu digito, o JavaScript erra a conta na hora de subtrair o valor digitado pelo valor da parte inteira do número digitado.

Por exemplo.

Quando eu digito 1.13, eu faço a subtração do número digitado (1.13) pelo seu inteiro ( parseInt(1.13) ), mas aí, PARA MINHA SURPRESA, o resultado não dá 0.13...... Tá duvidando????? Faz o teste aí.

 

Aí vai o código.....

 

<html><head><title>:: Não consegue subtrair ::</title><script language="javascript"><!--	function SoNum() {     if((event.keyCode < 48 && event.keyCode != 46) || (event.keyCode > 57)) {        event.returnValue = false;     } 	}	function subtrai(Num){  var cents;	  cents = Num - parseInt(Num);    // Aki em baixo são alguns teste que eu fiz usando diretamente NUMEROS e não o valor passado pela variável, e ainda assim não funcionou  // cents = 1.13 - 1.00;  -> Teste simples e que não funciona  // cents = (1.13 - 1) + 0.0000000000000001  -> Desse jeito o m***** funciona!!!!!!!  // cents = (1.13*100 - 1.00*100)/100;  -> Assim, tirando as casas decimais e depois colocando de novo, também não funciona  alert(cents);	}//--></script></head><body><form name="Form" method="post" action="">  <p>Num1:     <input name="n1" type="text" onKeyPress="SoNum();" value="1.13">    <input type="button" name="Submit" value="Calcula" onClick="subtrai(Form.n1.value);"><br>    chama a função no "onBlur"</p></form></body></html>

Já tô quase esmurrando o computador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá uma olhada

 

<html><head><title>:: Não consegue subtrair ::</title><script language="javascript"><!--function FormatNumber(Number,Decimals,Separator){ Number += ""; Decimals += "" Separator += "" if((Separator == "") || (Separator.length > 1))  Separator = "." if(Number.length == 0)  Number = "0" var OriginalNumber = Number var Sign = 1 var Pad = "" var Count = 0 if(parseFloat(Number)){  Number = parseFloat(Number)} else {  Number = 0} if((parseInt(Decimals,10)) || (parseInt(Decimals,10) == 0)){  Decimals = parseInt(Decimals,10)} else {  Decimals = 2} if(Number < 0) {  Sign = -1  Number *= Sign } if(Decimals < 0)  Decimals *= -1 Number = "" + Math.floor(Number * Math.pow(10,Decimals + 1) + 5) if((Number.substring(1,2) == '.')||((Number + '')=='NaN'))  return(OriginalNumber) if(Number.length < Decimals +1) {  for(Count = Number.length; Count <= Decimals; Count++)   Pad += "0" } Number = Pad + Number if(Decimals == 0){  Number = Number.substring(0, Number.length -1)} else { Number = Number.substring(0,Number.length - Decimals -1) +          Separator +          Number.substring(Number.length - Decimals -1,          Number.length -1)} if(Sign == -1)  Number = "-" + Number if(Number.length == 0)  Number="0" return(Number)}function SoNum() {    if((event.keyCode < 48 && event.keyCode != 46) || (event.keyCode > 57)) {       event.returnValue = false;    } }function subtrai(Num){ var cents;  cents = Number(Num) - parseInt(Num); cents = FormatNumber(cents,2,','); // Aki em baixo são alguns teste que eu fiz usando diretamente NUMEROS e não o valor passado pela variável, e ainda assim não funcionou // cents = 1.13 - 1.00;  -> Teste simples e que não funciona // cents = (1.13 - 1) + 0.0000000000000001  -> Desse jeito o m***** funciona!!!!!!! // cents = (1.13*100 - 1.00*100)/100;  -> Assim, tirando as casas decimais e depois colocando de novo, também não funciona alert(cents);}//--></script></head><body><form name="Form" method="post" action=""> <p>Num1:    <input name="n1" type="text" onKeyPress="SoNum();" value="1.13">   <input type="button" name="Submit" value="Calcula" onClick="subtrai(Form.n1.value);"><br>   chama a função no "onBlur"</p></form></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor forma de resolver o problema é usando o método de arredondamento (Match.round)

Ele consegue recuperar o valor dos centavos sem alteração para um número de até centenas de trilhões.

 

Aí vai o código:

 

<html><head><title>:: Não consegue subtrair ::</title><script language="javascript"><!--	function SoNum() {   if((event.keyCode < 48 && event.keyCode != 46) || (event.keyCode > 57)) {  	 event.returnValue = false;   } 	}	function subtrai(Num){  var cents;  cents = Math.round((Num - parseInt(Num)) *100)/100;  alert(cents);	}//--></script></head><body><form name="Form" method="post" action=""><p>Num1: <input name="n1" type="text" onKeyPress="SoNum();" value="1.13">  <input type="button" name="Submit" value="Calcula" onClick="subtrai(Form.n1.value);"></p></form></body></html>

Valeu pela força galera!!!!!!!!!! B)

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.