Calcular Valores Monetários Com PHP

Quem está iniciando em Programação Web, certamente já teve algum tipo de dificuldade ao trabalhar com cálculos.

Geralmente os problemas mais encontrados são: erros em cálculos por usar as variáveis de forma erradas, dificuldades relacionadas ao ponto ou vírgula, entre outras.

Minha finalidade nesta matéria não é a de lhe ensinar a usar este tipo de solução, mas através de exemplos práticos, te mostrar como é fácil implementar suas soluções!

Como fazemos em todas as nossas matérias, em anexo temos disponível os ficheiros para que tu possa estudar e testar a matéria que estaremos explicando a seguir.

calcular valores monetários

Exemplos Práticos

Abaixo vamos disponibilizar vários exemplos onde você pode pegar a idéia e usar em suas soluções!

Exemplo 01: Soma



$valor = "25.00";
$multa = "1.50";
$resultado = $valor + $multa;
echo number_format($resultado,2,",",".");
// resultado: 26,50

OBS.: Veja que com a função “number_format” trocamos o ponto por vírgula, correto?

Agora um detalhe: Se na multa você troca a “vírgula” pelo “ponto”, ao invés de dar como resultado “26,50″ (o que é correto) o sistema apresenta “26,00″.

A dica neste caso é disponibilizar a multa pré definida e o valor, você deixa a critério do usuário preencher como ele quiser.

Exemplo 02: FPrint

Uma outra opção para quem quer apresentar em tela um resultado melhorado de seus cálculos é o FPrint.



$valor = "204";
$multa = "1.50";
$resultado = $valor + $multa;
print sprintf("%0.2f", $resultado);
// resultado: 205.50

Exemplo 03: Formatação para número em reais sem decimal

O exemplo abaixo é bem prático e necessita atenção especial. Isso porque ele é de fundamental importância para que faz cálculos.

Imagine se você tiver de apresentar em tela o número a seguir: “111222333″. Se usarmos uma formatação adequada, não teremos problemas (conforme exemplo a seguir)!



$number = "111222333";
echo "R$ " .number_format($number, 0, ',', '.');
// resultado R$ 111.222.333

EXEMPLO 04: Notações Internacionais

Se você utiliza vários tipos de moedas, gostaria de te apresentar algumas notações importantes (conforme exemplo a seguir):


// Notação Inglesa (padrão)
$english_format_number = number_format($number);
// 1,234

// Notação Francesa
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// Notação Inglesa com separador de milhar
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

Exemplo 05: Calculadora

Bem… cansou de fazer soma?

Veja o que você pode fazer usando o exemplo a seguir!

Trata-se de uma calculadora (simples, mas prática) que pode te dar uma idéia do que podemos fazer a nível de programação!



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>WebMaster.PT :: Valores Monetários com Precisão</title>
<script type="text/javascript">
function maskIt(w,e,m,r,a){
// Cancela se o evento for Backspace
if (!e) var e = window.event
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
// Variáveis da função
var txt  = (!r) ? w.value.replace(/[^\d]+/gi,'') : w.value.replace(/[^\d]+/gi,'').reverse();
var mask = (!r) ? m : m.reverse();
var pre  = (a ) ? a.pre : "";
var pos  = (a ) ? a.pos : "";
var ret  = "";
if(code == 9 || code == 8 || txt.length == mask.replace(/[^#]+/g,'').length) return false;
// Loop na máscara para aplicar os caracteres
for(var x=0,y=0, z=mask.length;x<z && y<txt.length;){
if(mask.charAt(x)!='#'){
ret += mask.charAt(x); x++; }
else {
ret += txt.charAt(y); y++; x++; } }
// Retorno da função
ret = (!r) ? ret : ret.reverse()
w.value = pre+ret+pos; }
// Novo método para o objeto 'String'
String.prototype.reverse = function(){
return this.split('').reverse().join(''); };
</script>

<script language="javascript">
function number_format( number, decimals, dec_point, thousands_sep ) {
var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
var d = dec_point == undefined ? "," : dec_point;
var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
</script>

<script>
function calcula(operacion){
var operando1 = parseFloat( document.calc.operando1.value.replace(/\./g, "").replace(",", ".") );
var operando2 = parseFloat( document.calc.operando2.value.replace(/\./g, "").replace(",", ".") );
var result = eval(operando1 + operacion + operando2);
document.calc.resultado.value = number_format(result,2, ',', '.');
}
</script>
</head>

<body>

<h1>Valores Monetários com Precisão</h1>
<br>
<?php
if (isset($_GET['envio'])) {
echo $_GET['resultado']; }
?>

<form name="calc">
<input type="Text" name="operando1" value="" size="12" onkeyup="maskIt(this,event,'###.###.###,##',true)" dir="rtl">
<br/>
<input type="Text" name="operando2" value="" size="12" onkeyup="maskIt(this,event,'###.###.###,##',true)" dir="rtl">
<br/>
<input type="Button" name="" value=" + " onclick="calcula('+')">
<input type="Button" name="" value=" - " onclick="calcula('-')">
<input type="Button" name="" value=" X " onclick="calcula('*')">
<input type="Button" name="" value=" / " onclick="calcula('/')">
<br/>
<input type="Text" name="resultado" value="" size="12" dir="rtl"/>
<br/>
<input name="envio" type="submit" value="Enviar">
</form>
</body>
</html>

Bem… esse ficheiro não é difícil de se trabalhar e creio que com as explicações acima e detalhes descritos no mesmo, você poderá implementar fácilmente sua solução.

Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…

Download do código usado neste tutorial: Calcular Valores Monetários Com PHP

Be Sociable, Share!

6 Comentários

  1. Como sempre, excelente post! Não poderia ter vindo em melhor hora. Obrigado e abs.

  2. Gabriel Yamaguchi

    Muito bom, obrigado pela dica! Me ajudou bastante…

  3. Durama

    Perfeito, procurei por dias um script que formatasse com perfeição em valor monetário e o seu foi perfeito, parabéns pelo trabalho.

  4. uhelliton

    Ótimo tutorial, ajudou muito, obrigado.
    Que Deus o abençõe.

  5. Norma

    preciso calcular dobro de um numero usando procedure no maysql???
    pode ajudar???

Participa! Comenta...