Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
"faster than 98% of all tested websites" (tools.pingdom.com) - 100/100 Google PageSpeed Insights - Benvenuti :)

Php : Arrotondamenti di euro in Php

L'arrotondamento di una cifra in Php non è un'operazione cosi semplice come potrebbe sembrare, anche perché quando si lavora con un importi in euro possono sorgere esigenze particolari. Ho creato per voi uno snippet che vi tornerà senz'altro utile.

Php

Si fa presto a dire "arrotondare" .. in realtà, sopratutto quando si lavora con gli euro, si tratta di un'operazione che può essere svolta in modi diversi.

Per esigenze di pricing o di cassa, possono sorgere esigenze come queste:

  • arrotondare gli importi all'intero secondo regole matematiche (un prezzo di 32 euro e 21 centesimi diventa 32 euro)
  • arrotondare gli importi all'intero maggiore (32 euro e 21 centesimi diventa anch'esso 33 euro)
  • troncare i decimali perché i centesimi "impicciano" la cassa   (32 euro e 29 centesimi diventa 32 euro e 20 centesimi)

e cosi via..

Ho preparato questo snippet che potete usare per le vostre esigenze. Per illustrarne meglio il funzionamento, trovate subito dopo lo snippet degli esempi illustrativi. La funzione accetta tre parametri:

  • valueOriginal, il valore da formattare
  • roundDigits, la precisione di arrotondamento richiesta (int = intero, decimal= 1 decimale, halfint = ai 50 centesimi)
  • roundType, il tipo di arrotondamento richiesto (ceil = all'importo maggiore, floor = all'importo minore, round = secondo regola matematica)

Non preoccupatevi se non vi è molto chiaro, la tabella successiva allo snippet vi chiarirà subito le idee

function myRound($valueOriginal, $roundDigits='int', $roundType='round'){
    $value = number_format($valueOriginal,4);
    if($roundDigits == 'int'){
        if($roundType == 'round'){
            return round($value,0);
        }
        elseif($roundType == 'ceil'){
            return ceil($value);
        }
        elseif($roundType == 'floor'){
            return (int)round($value,4,PHP_ROUND_HALF_DOWN);
        }
    }
    elseif($roundDigits == 'decimal'){
        if($roundType == 'round'){
            return number_format(round($value,1),2);
        }
        elseif($roundType == 'ceil'){
            if($value == (int)$value){
                return number_format($value,2);
            }
            else{
                $value = $value+0.1;
                $value = number_format($value,4);
                $value = substr($value,0,-3);
                return number_format($value,2);
            }
        }
        elseif($roundType == 'floor'){
            $value = substr($value,0,-3);
            return number_format($value,2);
        }
    }
    elseif($roundDigits == 'halfInt'){
        if($roundType == 'round'){
            return number_format(round($value * 2) / 2,2);
        }
        elseif($roundType == 'ceil'){
            return number_format(ceil($value * 2) / 2,2);
        }
        elseif($roundType == 'floor'){
            return number_format(floor($value * 2) / 2,2);
        }
    }
    return $valueOriginal;
}

Esempio di uso della funzione (nella prima riga gli importi usati come esempio).