Ir para conteúdo

POWERED BY:

Arquivado

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

fernandoamorim

Soma de casa decimal com não decimal

Recommended Posts

Olá pessoaltenho um campo com valor em moeda (00,00) e um com quantidade (0:inteiro),na hora de fazer a soma, ele mostra no total (NaN)alguem poderia me explica o q ta acontecendo e o q devo fazer?obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

posta seu codigo ae pra gente analizar!flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

É FEITO EM AJAX....

 

VO POSTAR AS DUAS PÁGINAS Q USO...

O CONECTA.PHP SE PRECISAR EU MANDO

 

 

index.php

<?//CONECTA AO MYSQL			  require_once("conecta.php");	//PEGA AS CATEGORIAS $sql = "SELECT a.id, a.categoria FROM sis_cat a  ORDER BY a.categoria"; //EXECUTA A QUERY			   $sql = mysql_query($sql) or die (mysql_error());	   $row = mysql_num_rows($sql); ?><script language="JavaScript">   function Dados(valor) {	  //verifica se o browser tem suporte a ajax	  try {		 ajax = new ActiveXObject("Microsoft.XMLHTTP");	  } 	  catch(e) {		 try {			ajax = new ActiveXObject("Msxml2.XMLHTTP");		 }		 catch(ex) {			try {			   ajax = new XMLHttpRequest();			}			catch(exc) {			   alert("Esse browser não tem recursos para uso do Ajax");			   ajax = null;			}		 }	  }	  //se tiver suporte ajax	  if(ajax) {		 //deixa apenas o elemento 1 no option, os outros são excluídos		 document.forms[0].listProd.options.length = 1;		 		 idOpcao  = document.getElementById("opcoes");		 		 ajax.open("POST", "produtos.php", true);		 ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");		 		 ajax.onreadystatechange = function() {			//enquanto estiver processando...emite a msg de carregando			if(ajax.readyState == 1) {			   idOpcao.innerHTML = "Carregando...";   			}			//após ser processado - chama função processXML que vai varrer os dados			if(ajax.readyState == 4 ) {			   if(ajax.responseXML) {				  processXML(ajax.responseXML);			   }			   else {				   //caso não seja um arquivo XML emite a mensagem abaixo				   idOpcao.innerHTML = "-- Selecione a Categoria --";			   }			}		 }		 //passa o código da categoria escolhida		 var params = "categoria="+valor;		 ajax.send(params);	  }   }      function processXML(obj){	  //pega a tag produto	  var dataArray   = obj.getElementsByTagName("produto");	  	  //total de elementos contidos na tag produto	  if(dataArray.length > 0) {		 //percorre o arquivo XML paara extrair os dados		 for(var i = 0; i < dataArray.length; i++) {			var item = dataArray[i];			//contéudo dos campos no arquivo XML			var codigo	=  item.getElementsByTagName("codigo")[0].firstChild.nodeValue;			var descricao =  item.getElementsByTagName("descricao")[0].firstChild.nodeValue;			var preco	 =  item.getElementsByTagName("preco")[0].firstChild.nodeValue;						idOpcao.innerHTML = "-- Selecione o Produto --";						//cria um novo option dinamicamente  			var novo = document.createElement("option");			var valor_prod = document.createElement("option");				//atribui um ID a esse elemento				novo.setAttribute("id", "opcoes");				//atribui um valor				novo.value = (preco + "_" + codigo);				//atribui um texto				novo.text  = descricao;				// atribui o valor//				valor_prod.value = preco;				//finalmente adiciona o novo elemento				document.forms[0].listProd.options.add(novo);						 }	  }	  else {		//caso o XML volte vazio, printa a mensagem abaixo		idOpcao.innerHTML = "-- Sem Produtos --";	  }	     }   function incrementa(pprod) {	   		var tmp;		var nomes = document.forms[0].listProd.value;		padrao = /\s*_\s*/;		listaNomes = nomes.split (padrao);		padrao = /(\w+)\s+(\w+)/;		novalistaNomes = new Array;		tmp = listaNomes[0];		document.forms[0].preco.value = tmp;		}	///adicionei esta function para fazer a multiplicação passada por parametro.	function multiplica(valor,qtd) 	{	var temp;	temp=(valor*qtd);	document.forms[0].total.value=temp;	}</script><html>   <head>	  <title>127º artigo PHP</title>	  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">   </head>      <body bgcolor="#FFFFFF">	  <h1 align="center">Tela de Venda</h1>	  <br><br>	  <form name="frmAjax">  	  <table width="100%" border="0" cellspacing="0" cellpadding="0">		<tr>			<th width="126" scope="row">CATEGORIA</th>				<th width="244" scope="row">PRODUTO</th>				<th width="175" scope="row">PREÇO UNITÁRIO </th>				<th width="151" scope="row">QUANTIDADE</th>				<th width="154" scope="row">TOTAL</th>		</tr>			<tr>				<th scope="row"> </th>				<th scope="row"> </th>				<th scope="row"> </th>				<th scope="row"> </th>				<th scope="row"> </th>			</tr>			  			<tr>				<th scope="row"><select name="listCat" onChange="Dados(this.value);">				  <option value="0">-- Categoria --</option>				  <? for($i=0; $i<$row; $i++) { ?>				  <option value="<? echo mysql_result($sql, $i, "id"); ?>"> <? echo mysql_result($sql, $i, "categoria"); ?></option>				  <? } ?>				</select></th>				<th scope="row"><select name="listProd" onChange="incrementa(this.value);">				  <option id="opcoes" value="0">-- Selecione o Produto --</option>				</select></th>				<th scope="row" align="center">R$ 				  <input name="preco" type="text" size="10" readonly="true"></th>				<th scope="row" align="center"><input name="qtd" type="text" size="10" onBlur="multiplica('preco.value','qtd.value')"></th>				<th scope="row" align="center">R$ 				  <input name="total" type="text" size="10" readonly="true"></th>			</tr>	  </table>   </form>   </body></html>

 

produtos.php

<?//CONECTA AO MYSQL					 require_once("conecta.php");		   //RECEBE PARÃMETRO					 $pCat = $_POST["categoria"];		   //QUERY  $sql = "SELECT a.id, a.produto, a.preco FROM sis_prod a WHERE a.id_cat = ".$pCat." ORDER BY a.produto";			//EXECUTA A QUERY			   $sql = mysql_query($sql);	   $row = mysql_num_rows($sql);	//VERIFICA SE VOLTOU ALGO if($row) {				   //XML   $xml  = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";   $xml .= "<produtos>\n";			         //PERCORRE ARRAY			   for($i=0; $i<$row; $i++) {  	  $codigo	= mysql_result($sql, $i, "id"); 	  $descricao = mysql_result($sql, $i, "produto");	  $preco	 = mysql_result($sql, $i, "preco");   	  $xml .= "<produto>\n";	 	  $xml .= "<codigo>".$codigo."</codigo>\n";				  	  $xml .= "<descricao>".$descricao."</descricao>\n"; 	  $xml	  .= "<preco>".$preco."</preco>\n";	 	  $xml .= "</produto>\n";	   }//FECHA FOR				       $xml.= "</produtos>\n";      //CABEÇALHO   Header("Content-type: application/xml; charset=iso-8859-1"); }//FECHA IF (row)											   //PRINTA O RESULTADO  echo $xml;?>

ta ae moçada....

 

abraço...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho um campo com valor em moeda (00,00) e um com quantidade (0:inteiro),na hora de fazer a soma, ele mostra no total (NaN)

Cara, não tive paciência de ler este código gigantesco, mas analisando sua dúvida inicial, eu acho que a "culpa" é daquela vírgula que tem no seu formato moeda né? :) hehehAntes de fazer o cálculo, dê um replace, sei lá... no seu valor moeda, para que ele substitua a vírgula por ponto (que é a forma que os computadores tratam dados não inteiros).

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz uma implementeção do código de la...

 

http://www.shtutoriais.com.br/sistema/util...ma_decimais.php

 

por exemplo

 

no valor 1, digite 111,11 e no segundo digite 1.111,11

de um desconto la...

no valor recebido digite 5.000,00

 

ele naum mostra o troco...

 

ta danto pau na casa de milhar....

vo posta o codigo aki

 

<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><script language="JavaScript">function fcnOnlyNum(event) {	var kCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;	var caract = new RegExp(/^[0-9 \b]+$/i);	var caract = caract.test(String.fromCharCode(kCode));	if(!caract){		return false;	}}function FormataValor(campo,tammax,teclapres) {var tecla = teclapres.keyCode ? teclapres.keyCode : teclapres.which ? teclapres.which : teclapres.charCode;vr = document.form[campo].value;vr = vr.replace( "/", "" );vr = vr.replace( "/", "" );vr = vr.replace( ",", "" );vr = vr.replace( ".", "" );vr = vr.replace( ".", "" );vr = vr.replace( ".", "" );vr = vr.replace( ".", "" );tam = vr.length;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 <= 2 ){document.form[campo].value = vr; }if ( (tam > 2) && (tam <= 5) ){document.form[campo].value = vr.substr( 0, tam - 2 ) + ',' + vr.substr( tam - 2, tam ); }if ( (tam >= 6) && (tam <= 8) ){document.form[campo].value = vr.substr( 0, tam - 5 ) + '.' + vr.substr( tam - 5, 3 ) + ',' + vr.substr( tam - 2, tam ); }}}var trocaV = /,/g;var trocaP = /\./g;function Soma() {A = document.getElementById("orc_va").value.replace(trocaV,".");B = document.getElementById("mo_hard").value.replace(trocaV,".");C = document.getElementById("desc").value;// calcula o total, pegando o total de cada produto menos a porcentagem de descontoTotal = (parseFloat(A) + parseFloat(B));Total = Total*((100-C)/100);	if (Total > 0) {		var TotalGeral = Total.toFixed(2);		document.getElementById("total").value = TotalGeral.toString().replace(trocaP,",");	} else {		document.getElementById("total").value = "";	}// valor recebido do cliente	D = document.getElementById("recebido").value.replace(trocaV,".");E = document.getElementById("total").value.replace(trocaV,".");	Troco = (parseFloat(D) - parseFloat(E));		if (D > 0) {		var TotalTroco = Troco.toFixed(2);		document.getElementById("troco").value = TotalTroco.toString().replace(trocaP,",");	} else {		document.getElementById("troco").value = "";	}	}</script></head><body><form action="" method="post" name="form" id="form">  <table width="200"  border="0" align="center" cellpadding="2" cellspacing="0">	<tr>	  <td width="44%" bgcolor="#E9E9E9">Valor 1 </td>	  <td width="56%" bgcolor="#E9E9E9"><span class="fontepbold">R$</span>		<input name="orc_va" type="text" style="text-align: right;" id="orc_va" onKeyPress="return fcnOnlyNum(event)" onKeyDown="FormataValor('orc_va', 13, event);" onKeyUp="Soma();" size="10" maxlength="9"></td>	</tr>	<tr bgcolor="#E9E9E9">	  <td>Valor 2 </td>	  <td><span class="fontepbold">R$</span>		<input name="mo_hard" type="text" style="text-align: right;" onKeyPress="return fcnOnlyNum(event)" onKeyDown="FormataValor('mo_hard', 13, event)" onKeyUp="Soma();" id="mo_hard" size="10" maxlength="9"></td>	</tr>	<tr>	  <td>Descontos</td>	  <td>% 		<input name="desc" type="text" style="text-align: right;"  onKeyUp="Soma();" id="desc" size="10" maxlength="9"></td>	</tr>	<tr bgcolor="#FFFFCC">	  <td>Total</td>	  <td><span class="fontepbold">R$</span>		<input name="total" type="text" style="text-align: right;" id="total" size="10" maxlength="9" readonly="true"></td>	</tr>	<tr bgcolor="#FFFFCC">	  <td>Recebido</td>	  <td>R$	  	  <input name="recebido" type="text" style="text-align: right;" onKeyPress="return fcnOnlyNum(event)" onKeyDown="FormataValor('recebido', 13, event)" onKeyUp="Soma();" id="din" size="10" maxlength="9"></td>	</tr>	<tr bgcolor="#FFFFCC">	  <td>Troco</td>	  <td>R$	  	  <input name="troco" type="text" style="text-align: right;" onKeyPress="return fcnOnlyNum(event)" onKeyDown="FormataValor('troco', 13, event)" onKeyUp="Soma();" id="troco" size="10" maxlength="9" readonly="true"></td>	</tr>  </table></form></body></html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

alguem me explicaria como funciona essa função? para que serve exatamente?

 

function fcnOnlyNum(event) {	var kCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;	var caract = new RegExp(/^[0-9 \b]+$/i);	var caract = caract.test(String.fromCharCode(kCode));	if(!caract){		return false;	}}

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.