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