Tax Calculator - Cents Aren’t Adding Up

Asked

Viewed 73 times

-1

Good night, you guys.

I’m trying to make a simple tax calculator, it’s working except for the question of the pennies that don’t show up at full value.

**

index php.

**

<?php
require ('calculo.php');
?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calculadora de Impostos</title>
</head>

<body>
<h1>Calculadora de Impostos</h1>

<form method="post">
<label for="valor">Valor do produto: </label>
    <input type="text" name="valor" pattern="[0-9.,]{1,}" style="text-align:right" placeholder="Ex.: 197.07"><br><br>

    <label for="imposto">Imposto do produto (em %): </label>
    <input type="text" name="imposto" pattern="[0-9.,-]{1,}" style="text-align:right" placeholder="Somente números"><br><br>

    <input type="submit" value="Calcular">
   </form> <br>

Valor do Produto (s/ imposto): <?php echo $notax ?><br>
Taxa de Imposto: <?php echo $taxpercentage ?><br>
<hr>
Imposto sobre o produto: <?php echo $taxedResult ?><br>
Valor do produto (c/ imposto): <?php echo $taxprodResult ?><br>

</body>

</html>

**

calculus.php

**

<?php

if (isset($_POST['valor']) && !empty($_POST['valor']) && isset($_POST['imposto']) && !empty($_POST['imposto'])) {
$valor = addslashes($_POST['valor']);
$imposto = addslashes($_POST['imposto']);

// Passando os valors para float

$valor = floatval($valor);
$valor = number_format($valor, 2, ",", ".");

$imposto = floatval($imposto);
$imposto = number_format($imposto, 2, ",", ".");

$notax = "R$ " . $valor;
$taxpercentage = $imposto."%";

$taxed = ($valor * $imposto) / 100;
$taxed = number_format($taxed, 2, ",", ".");
$taxedResult = "R$ " . $taxed;

$taxprod = $valor + $taxed;
$taxprod = number_format($taxprod, 2, ",", ".");
$taxprodResult = "R$ " . $taxprod;
}

I did a search and if I use str_replace to turn the dots into commas instead of format_number it works but it fails to address the numbers right? I’m a beginner in PHP and if anyone can explain this to me, because from what I read in the documentation:

number_format - Format a number with thousands grouped
number_format ( float $number [, int $decimals ] ) string

str_replace - Replace all occurrences of the search string with the substitution string
str_replace ( Mixed $search , Mixed $replace , Mixed $Subject [, int &$Count ] ) : Mixed

Thanks for your help!

1 answer

0

You talking, man, huh? Your number_format is written in a way that PHP does not use for calculations. I put together a few simple examples to understand how to handle numbers and calculations in PHP using NUMBER_FORMAT

<?
#Vou realizar um calculo simples entre duas variaveis que possuem 
#valores escritos de formas CONVENCIONAIS com ponto e virgula
$valor_1 = '19.450,67';
$valor_2 = '650,93';

#Vou supor que seu VALOR esta vindo sempre no formato zero igual a => "0,00" e seu VALOR em mil igual => "1.000,00"
#Primeiro temos que formatar os numeros pra eles se adequarem ao PHP, vamos remover os pontos => "." (serao removidos quando houverem)
$valor_1 = str_replace('.', '', $valor_1);
$valor_2 = str_replace('.', '', $valor_2);

//Isso nos retorna 19450,94 e 650,94
echo $valor_1;
echo '<br>';
echo $valor_2;

//Agora vamos tratar a troca da VIRGULA por PONTO
$valor_1 = str_replace(',', '.', $valor_1);
$valor_2 = str_replace(',', '.', $valor_2);

//Isso nos retorna 19450.94 e 650.94
//Nesse formato os numeros ja podem passar por calculos:
echo '<br><br>=======<br>';
echo $valor_1;
echo '<br>';
echo $valor_2;

echo '<br><br>=======<br>';

$resultado_soma = $valor_1+$valor_2;
echo ' SOMA '.$resultado_soma;

echo '<br><br>=======<br>';

$resultado_subtracao = $valor_1-$valor_2;
echo ' SUBTRACAO '.$resultado_subtracao;

echo '<br><br>=======<br>';

$resultado_multiplicacao = $valor_1*$valor_2;
echo ' MULTIPLICACAO '.$resultado_multiplicacao;

echo '<br><br>=======<br>';

$resultado_divisao = $valor_1/$valor_2;
echo ' DIVISAO  '.$resultado_divisao;


#Agora vamos aplicar o NUMBER_FORMAT pra organizar visualmente a impressao dos numeros
#Essa organizacao nao serve para novos calculos apenas para imprimir na tela do usuario:
$resultado_soma_resposta_visual = number_format($resultado_soma, '2', ',', '.');
$resultado_subtracao_resposta_visual = number_format($resultado_subtracao, '2', ',', '.');
$resultado_multiplicacao_resposta_visual = number_format($resultado_multiplicacao, '2', ',', '.');
$resultado_divisao_resposta_visual = number_format($resultado_divisao, '2', ',', '.');

echo '<br><br>=======<br>';
echo 'IMPRESSAO DE RESULTADOS VISUAIS<BR>';
echo $resultado_soma_resposta_visual;
echo '<br>';
echo $resultado_subtracao_resposta_visual;
echo '<br>';
echo $resultado_multiplicacao_resposta_visual;
echo '<br>';
echo $resultado_divisao_resposta_visual;


#Se voce vai reutilizar os resultados para novos calculos, o correto eh utilizar o NUMBER_FORMAT
#para reorganizar a estrutura dos numeros e ai sim passar os novos valores para seus calculos:
$resultado_soma_resposta_funcional = number_format($resultado_soma, '2', '.', '');
$resultado_subtracao_resposta_funcional = number_format($resultado_subtracao, '2', '.', '');
$resultado_multiplicacao_resposta_funcional = number_format($resultado_multiplicacao, '2', '.', '');
$resultado_divisao_resposta_funcional = number_format($resultado_divisao, '2', '.', '');

echo '<br><br>=======<br>';
echo 'IMPRESSAO DE RESULTADOS FUNCIONAIS<BR>';
echo $resultado_soma_resposta_funcional;
echo '<br>';
echo $resultado_subtracao_resposta_funcional;
echo '<br>';
echo $resultado_multiplicacao_resposta_funcional;
echo '<br>';
echo $resultado_divisao_resposta_funcional;

?>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.