2012-10-16 9 views
6

Wyszukiwanie funkcji ro okrągłych liczb do najbliższej wielokrotności 5Okrągłe całkowitą do najbliższej wielokrotności 5 w PHP

22 -> 20 
23 -> 25 
40 -> 40 
46 -> 45 
48 -> 50 

i tak dalej.

Tried to co zawsze zwraca większą wartość:

5 * ceil($n/5); 
+0

Wypróbuj także operator modulus: '$ n - ($ n% 5); zazwyczaj jest to najlepsze rozwiązanie w tych przypadkach. – Mahn

Odpowiedz

20

Korzystając round() zamiast ceil().

5 * round($n/5); 

ceil() rundy liczbę zmiennoprzecinkową do następnej liczby całkowitej w kolejności. round() zaokrągli do najbliższej liczby całkowitej za pomocą standardowych reguł zaokrąglania.

+0

thx man, that was easy :) – Chris

+1

'' 'round()' '' zwraca liczbę zmiennoprzecinkową nie będącą liczbą całkowitą. '' '(int) 5 * runda ($ n/5);' '' może być lepsze. – trante

+0

@trante Zaokrągli to do liczby całkowitej, ale nadal będzie typu 'float'. – alex

0

Powrót do matematyki, ponieważ runda pracuje z miejscami po przecinku, pomnóż przez 5 i podziel przez 10, a następnie zaokrąglij. Pomnóż ponownie przez 5, aby uzyskać to, czego chcesz. (Other odpowiedź działa tak samo, tylko inny sposób patrzenia na niego)

function round_5($in) 
{ 
    return round(($in*2)/10)*5; 
} 

echo round_5(48); 

sprawdzić, czy to pomaga

0

Cóż, w obliczu tego problemu, pomagając dokonać POS dla kanadyjskiej firmy, wymyślił ten rozwiązanie, mam nadzieję, że pomaga komuś. (Kanada usunęła pensa w 2012 r.). Obejmuje również uwzględnianie cen w podatkach, wystarczy podać "1" jako drugi argh.

//calculate price and tax 
function calctax($amt,$tax_included = NULL){ 
    $taxa = 'tax rate 1 here'; 
    $taxb = 'tax rate 2 here'; 
    $taxc = ($taxa + $taxb) + 1; 
    if(is_null($tax_included)){ 
    $p = $amt; 
    }else{ 
    $p = number_format(round($amt/$taxc,2),2); 
    } 
    $ta = round($p * $taxa,2); 
    $tb = round($p * $taxb,2); 
    $sp = number_format(round($p+($ta + $tb),2),2); 
    $tp = number_format(round(($sp*2)/10,2)*5,2); 
    $ret = array($ta,$tb,$tp); 
    return $ret; 
} 
Powiązane problemy