Ajuda para formatar campo com 2 casas decimais

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 = "";
				}
					
	}
	
}

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

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

Alguém ja usou toFixed dentro de loop?

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.

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?

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.

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…

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.