Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jaques_Linha11

Valor truncado divergente

Recommended Posts

Boa tarde,

 

tenho um problema com valores que preciso truncar em uma determinada rotina, consegui isolar o problema e agradeço a ajuda dos colegas.

 

Desde já fico muito agradecido.

 

código:

<?php

$quant = 20;

$preco = 41.406;

$total = number_format(floor($quant * $preco*100)/100,2,'.','');

echo "Total>> $total<br><br>";

 

// resultado = Total>> 828.12 que é o que eu esperava...

 

$quant = 20;

$preco = 41.406;

$total = number_format(floor($quant * ($preco * 100))/100,2,'.','');

echo "Total>> $total<br><br>;

 

// embora apenas tenha sido alterada a precedência onde foi feito primeiro a multiplicação por 100

// da variável $preco, o resultado obtido é diferente

// resultado = TOTAL>> 828.11

 

$quant = 21;

$preco = 53.72;

$total = number_format(floor($quant * $preco * 100)/100,2,'.','');

echo "Total>> $total<br><br>";

// resultado = Total>> 1128.11 quando o esperado seria 1128.12;

 

$quant = 21;

$preco = 53.72;

$total = number_format(floor($quant * ($preco * 100))/100,2,'.','');

echo "Total>> $total<br><br>";

// neste formato o resultado fica certo para estes valores.

// resultado = Total>> 1128.12

 

?>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já passei por isso. A flutuação dos números no PHP tem uma precisão limitada. Na conversão, o sistema pode não estar considerando 82812 e sim 82811,99999999999999999999991, por exemplo. Já tive problemas com isso e indo até os mais longínquos cantos do Google, descobri que se corrige esse problema usando a função strval(). No caso, ficaria:

floor(strval($quant * ($preco * 100)));

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.