Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá estou com dificuldades para fazer essa conta corretamente, para que não aja erros matemático futuros no site.
tenho um $valor_total quero dividir ele por 2 e separar no $valor1 e $valor2 sem arredondar e caso aja algum resto na conta, quero somar o resto do $resto_valor1+$resto_valor2 na varaivel $resto e depois finalizar sempre com os valores totais corretamente, veja o exemplo abaixo.
$valor_total = 157.75 //valor total
$valor1 = $valor_total/2; // resultado = 78.875
$valor2 = $valor_total/2; // resultado = 78.875
$resto_valor1 = 0.005
$resto_valor2 = 0.005
$resto = $resto_valor1+$resto_valor2; // resultado 0.01
// para finalizar quero que as variaveis me retornam sempre os valores corretamente
$valor1 = 78.87
$valor2 = 78.87
$resto_total = 0.01
Sendo que a soma dos valores $valor1+$valor2+$resto_total tem que ser idêntico ao $valor_total = 157.75 para que não aja erros futuros na matematica, alguem poderia me ajudar a fazer isso no PHP, tentei de varias formas mais não estou conseguindo
Boa Tarde, não consegui fazer dos jeito que você mencionou, então usei o explode(), veja como ficou
$valor_total = '157.75';
$divide_total = $valor_total/2;
echo $divide_total."<br>"; // resultado = 78.875
$explode = explode('.', $divide_total);
$result = $explode[1];
print_r($result); // resultado = 875
echo "<br>";
$arr = str_split($result, 2);
for ($i=1;$i<count($arr);$i++) {
$resto_total .= $arr[$i];
}
$resto_total_1 = "0.00".$resto_total; // 0.005
$total_final_1 = $divide_total-$resto_total_1; // 78.875-0.005
$resto_total2 = "0.00".$resto_total; // 0.005
$resto_total2 = $resto_total22; // 0.0052
$soma_valores = $resto_total2+($total_final_12); // 0.01+(78.872)
echo "resto = ". $resto_total2."<br>"; // resto = 0.01
echo "valor 1 = ". $total_final_1."<br>"; // 78.87
echo "valor 2 = ". $total_final_1."<br>";// 78.87
echo "valor total = ". $soma_valores."<br>";// 157.75
creio que ficou correto, mas melhor pedir ajuda aos universitário né kkk.. será que terei algum problema futuro com esse codigo? ou realmente está correto a matematica?
Outro detalhe, como faço para verificar se $resto_total2 está vazio ou não, fiz um teste aqui dessa forma
if ($resto_total2 > 0.0099999999999999999999999999999999999999999999999999999999999999999999999){
echo "SIM";
}
nesse teste não está aparecendo a mensagem "SIM" e deveria estar né, pois o valor da $resto_total2 é maiorBom quanto a ultima duvida, para quem quiser saber aí, acrescentei assim
for ($i=1;$i<count($arr);$i++) {
$resto_total .= $arr[$i];
}
$resto_sem_zero = intval($resto_total); //retirei todos os possiveis 0 da esquerda
if ($resto_sem_zero > 0){
// tem resto
} else {
// não tem resto
}
creio que dessa forma não terei problemas futuros, se alguem descorda, por favor me dê um feedback,
Obrigado
Olá!
Você tem dois caminhos:
1 - Utilizar a biblioteca nativa BC Math, como neste exemplo: https://forum.imasters.com.br/topic/581601-arredondar-valor-0444444-para-045/?tab=comments#comment-2276243
2 - Considerar a unidade como centavo (ou fração de centavo) e não como real. As maiores instituições financeiras fazem dessa forma. Exemplo: 1500 para representar R$15,00.
Caso você precise de maior precisão, basta utilizar mais casas.