Conflict between php number_format and javascript parseFloat

0

I am putting together a system to calculate freight in php, ajax and javascript. The calculates-frete page receives a value through the number_format(($_SESSION['total']), 2, ',', '.') that comes from the shopping cart.

After calculating the freight, I present the total value of the purchase (with freight). But the sum does not beat. A purchase in the amount of 1,575.30 with 17.20 freight gives a total of 18,775. I believe there is a conflict between number_format and parseFloat or replace of javascript.

Follow the html and javascript. If anyone can help me, thank you in advance.

<input id ="valor_produto" type ="text" value = "<?php echo number_format(($_SESSION['total']), 2, ',', '.'); ?>"/><br/><br/>
Cep Destino = <input id ="cep_destino" type ="text" value ="", maxlength ="8"/><br/><br/>
Valor Frete = <input id ="valor_frete" type ="text" value =""/><br/><br/>
Valor Total = <input id ="valor_total" type ="text" value =""/><br/><br/> 
<button type="button" onclick ="LoadFrete();">Calcular Frete</button>


function LoadFrete(){

var cep_destino = $('#cep_destino').val();
var valor_produto = $('#valor_produto').val();

$.ajax({
 url: 'ajax/a_frete.php',
 type: 'POST',
 dataType: 'html',
 cache: false,
 data: {cep_destino: cep_destino},
 success: function (data){

 console.log(data);

 $('#valor_frete').val(data);

 var valor_produto = $('#valor_produto').val();  

 var total = parseFloat(data) + parseFloat(valor_produto);

 $('#valor_total').val(total);

 $('#prazo_entrega').val(data);  

 }, beforeSend: function (){
 }, error: function (jqXHR, textStatus, errorThrown) {
    console.log('Erro');
 }

});
}
    
asked by anonymous 19.10.2017 / 21:21

1 answer

1

1,575.30 is not a number that can be used in mathematical calculations. You do not type this into your physical or virtual calculator to perform a calculation. You would type 1575.30

In programming also the same rule applies, the numbers must be of integer type or, integer separated by dot followed by fractional part, parteinteira.partefracionaria

//tratando string para formato válido para calculos matematicos
//retira os pontos (.) dos separadores de milhar
 valor_produto = valor_produto.replace(/\./g, '');

//caso frete venha a ter separador de milhar
//frete = frete.replace(/\./g, '');

//transforma virgula (,) em ponto (.)
valor_produto=valor_produto.replace(",",".");
frete=frete.replace(",",".");

Example

function LoadFrete(){
	var frete;
	var cep_destino = $('#cep_destino').val();
	var valor_produto = $('#valor_produto').val();
	
	 valor_produto = valor_produto.replace(/\./g, '');
	
	 valor_produto=valor_produto.replace(",",".");
	
	 frete = $('#valor_frete').val();  
	 
	 frete=frete.replace(",","."); 
	
	 var total = parseFloat(frete) + parseFloat(valor_produto);
	
     $('#valor_total').val(((total).toFixed(2).replace(".", ",")).replace(/\B(?=(\d{3})+(?!\d))/g, "."));

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><inputid="valor_produto" type ="text" value = "1.050,20"/><br/><br/>
Valor Frete = <input id ="valor_frete" type ="text" value =""/><br/><br/>
Valor Total = <input id ="valor_total" type ="text" value =""/><br/><br/> 
<button type="button" onclick ="LoadFrete();">Calcular Frete</button>
    
19.10.2017 / 22:28