Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal. Na paz?
É o seguinte, tenho um formulário onde gera um cálculo automático conforme abaixo:
<div class="container">
<form method="post" style="margin-top: 10px">
<div class="form-group"><label>Valor Total: </label><input type="text" id="valorTotal" class="form-control" value="12000.00" onchange="calcular()"></div>
<div class="form-group">
<div class="col-md-12">
<input type="radio" name="JurosDesconto" onclick="desabilitarJurosDesconto(0)"> <label>Juros: <small>Cobrar após o vencimento</small></label>
<div class="input-group" style="width: 30%">
<input type="number" name="Juros" id="juros" class="form-control" min="0" max="100" value="0" onKeyPress="if(this.value.length==2) return false;" onchange="calcular()" disabled>
<span class="input-group-addon" id="basic-addon2">%</span>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12">
<input type="radio" name="JurosDesconto" onclick="desabilitarJurosDesconto(1)"> <label>Desconto:</label>
<div class="input-group" style="width: 30%">
<input type="number" name="Desconto" id="desconto" class="form-control" min="0" max="100" value="0" onKeyPress="if(this.value.length==2) return false;" onchange="calcular()" disabled>
<span class="input-group-addon" id="basic-addon2">%</span>
</div>
</div>
</div>
<div class="form-group">
<div class="col-md-12">
<input type="checkbox" name="QTDParcelas" id="qtdParcelas" onclick="desabilitarQtdParcelas()"> <label>Qtd. de parcelas:</label>
<div class="input-group" style="width: 30%">
<input type="number" name="QuantidadeParcelas" id="parcelas" class="form-control" min="0" max="100" value="0" onKeyPress="if(this.value.length==2) return false;" onchange="calcular()">
</div>
</div>
</div>
<div class="form-group" style="margin-top: 10px">
<label for="nomealuno" class="control-label">Valor Final: <span style="color: red">*</span></label>
<input type="text" name="ValorFinal" id="valorFinal" class="form-control" onchange="calcular()" required="required">
</div>
<div class="form-group">
<label for="nomealuno" class="control-label">Valor das parcelas: <span style="color: red">*</span></label>
<input type="text" name="ValorParcelas" id="valorParcelas" class="form-control" onchange="calcular()" required="required" onchange="calcular()">
</div>
</form>
</div>
**Javascript**
<script type="text/javascript">
function calcular(){
var valor1 = document.getElementById('valorTotal').value;// valor total
var valor1T = parseFloat(valor1.replace(/[^0-9,]*/g, '').replace(',', '.'));
var valor2 = parseInt(document.getElementById('juros').value); // juros
var valor3 = parseInt(document.getElementById('desconto').value); // descontos
var valor4 = document.getElementById('valorParcelas').value; // parcelamento
if (!isNaN(valor1T) && !isNaN(valor2) && !isNaN(valor3) && !isNaN(valor4)){
if(valor2){ // juros
var valorT = (valor1T * (valor2/100)) + valor1T;
}
if(valor3){ // desconto
var valorT = (valorT * (valor3/100)) - valor1T;
}
if(valor4){ // parcelamento
var valorP = valorT / valor4;
if(valor2){
var valorPP = (valorP * (valor2/100)) + valorP;
}else if(valor3){
var valorPP = (valorP * (valor3/100)) - valorP;
}else{
var valorPP = valorP;
}
}
var valorFinal = "R$ " + parseFloat(valorT).toFixed(2)
.replace('.',',')
.replace(/([0-9]*)([0-9]{3},*)/, '$1.$2');
document.getElementById('valorFinal').value = valorFinal;
if(!isNaN(valorPP)){
var valorFinal = "R$ " + parseFloat(valorPP).toFixed(2)
.replace('.',',')
.replace(/([0-9]*)([0-9]{3},*)/, '$1.$2');
var valorParcelas = "R$ " + parseFloat(valorPP).toFixed(2)
.replace('.',',')
.replace(/([0-9]*)([0-9]{3},*)/, '$1.$2');
document.getElementById('valorFinal').value = valorFinal;
document.getElementById('valorParcelas').value = valorParcelas;
}
}
}
</script>
O problema está quando mostro o resultado no campo valorFinal e valorParcelas. Quando crio a máscara de retorno e o valor não é milhar, me retorna dessa forma R$ .323,00. O trecho seria esse:
var valorFinal = "R$ " + parseFloat(valorPP).toFixed(2)
.replace('.',',')
.replace(/([0-9]*)([0-9]{3},*)/, '$1.$2');
var valorParcelas = "R$ " + parseFloat(valorPP).toFixed(2)
.replace('.',',')
.replace(/([0-9]*)([0-9]{3},*)/, '$1.$2');
Como faço para que essa máscara automática funcione com valores com e sem milhar?Carregando comentários...