Ajuda para formatar campo com 2 casas decimais

7 respostas
I

Amigos, tenho um javascript que multiplica 2 campos e exibe o resultado no terceiro campo… ta funfando certinho… o problema é q quando multiplico 2 valores inteiros queria q o resultado apareça com 2 casas decimais:

Ex:

2 x 2 = 4,00

Outro caso é quando multiplico e o resultado aparece mais de 2 casas decimais… queria q tb aparecesse somente com 2…

Aparece a msg de erro. Estou tentando usar toFixed(2)

Objeto não dá suporte para propriedade ou método.

Estou usando o JS abaixo:

// Função para multiplicar os campos qtdItem com valorUnitario
function multiplica() {
	
	var trocaV = /,/g;
	var trocaP = /\./g;
	
	var totalTemp = document.forms["estoqueForm"].elements["totalTemp"];
	
	var txtCodProduto = document.forms["estoqueForm"].elements["codProduto"];
   	var txtQtdItem = document.forms["estoqueForm"].elements["qtdItem"];
	var txtValorUnitario = document.forms["estoqueForm"].elements["valorUnitario"];
	var txtValorTotalItem = document.forms["estoqueForm"].elements["valorTotalItem"];
	var iLoop;
	
	//alert(txtCodProduto.length);
	
	for (iLoop = 0; iLoop < txtCodProduto.length; iLoop++){
		
		if ((isNaN(txtQtdItem[iLoop].value)) || (isNaN(txtValorUnitario[iLoop].value.replace(trocaV,".")))) {
							
			alert("Preencha os valores corretamente!");
						
	    } else {
		
			totalTemp[iLoop].value = parseFloat(txtQtdItem[iLoop].value.replace(trocaV,".")) * parseFloat(txtValorUnitario[iLoop].value.replace(trocaV,"."));
					
			}
			if (totalTemp[iLoop].value > 0) {
												
				txtValorTotalItem[iLoop].value = totalTemp[iLoop].value.toString().replace(trocaP,",");
				
				txtValorTotalItem[iLoop].value.toFixed(2);
								
				} else {
				
					txtValorTotalItem[iLoop].value = "";
				}
					
	}
	
}

7 Respostas

T

http://www.w3schools.com/jsref/jsref_tofixed.asp

I

É justamente oq tento fazer mais nao funfa… pois estou usando toFixed dentro de um loop…

Alguém ja usou toFixed dentro de loop?

T

Você não viu o que o programa de exemplo faz? Ele não pega diretamente o valor de “value” e chama “toFixed”. É que “value” provavelmente, nesse ponto do programa, é tipo String, não Number. O que você deveria fazer é algo como:

txtValorTotalItem[iLoop].value = (new Number (txtValorTotalItem[iLoop].value)).toFixed(2);

Lembre-se que “toFixed” não altera diretamente o valor; ele só pega o valor (do tipo Number) e retorna um valor String com as 2 casas decimais devidamente formatadas.

I

Amigo thingol,

Tentei usar o seu codigo, mas o que é mostrado no campo text é Nan ao invés do resultado formatado…

O que pode estar errado?

T

Você precisa passar ao construtor da classe Number (ou seja, “new Number”) um valor formatado com ponto decimal, não com vírgulas.
new Number não gosta de vírgulas. Ele é americano, entendeu?

Por exemplo, new Number (“123.4”).toFixed (2) retorna “123.40”, mas new Number (“123,4”).toFixed (2) retorna NaN.

É que não vi que você estava trocando os pontos por vírgulas antes; você tem de fazer isso DEPOIS de formatar o campo com 2 decimais. Nã o vou corrigir seu programa, que sei que você é inteligente; só estou explicando o que você tem de fazer.

I

Vlw amigo thingol, fiz o seguinte:

txtValorTotalItem[iLoop].value = (new Number (totalTemp[iLoop].value)).toFixed(2);
txtValorTotalItem[iLoop].value = txtValorTotalItem[iLoop].value.toString().replace(trocaP,",");

Funfou certinho… mas queria melhor mais um pouco… tipo to multiplicando os valores 10 x 150,00 = 1500,00 … queria q a formatação fosse 1.500,00 … como poderia fazer isto? colocar “.” para as casas de milhar e etc…

Vlw…

T

Você pode modificar este programa:

http://javascript.internet.com/forms/currency-format.html

(ele põe vírgulas no lugar dos pontos e pontos no lugar das vírgulas, porque usa o formato americano, mas eu sei que você é esperto suficiente para adaptar o programa que indiquei para formatar em formato brasileiro.

Criado 25 de fevereiro de 2009
Ultima resposta 26 de fev. de 2009
Respostas 7
Participantes 2