2012-07-27 20 views
11

ho il seguente codice che arrotonda i miei ammonta al dollaro più vicino:arrotondamento al più vicino 50 centesimi

switch ($amazonResult['SalesRank']) { 
    case ($amazonResult['SalesRank'] < 1 || trim($amazonResult['SalesRank'])===''|| !isset($amazonResult['SalesRank']) || $amazonResult['SalesRank']=== null): 
     $Price=((float) $lowestAmazonPrice) * 0.05; 
     $payPrice = round($Price, 0); //to round the price up or down to the nearest $ 
     break; 
    case ($amazonResult['SalesRank'] > 0 && $amazonResult['SalesRank'] <= 15000): 
     $Price=((float) $lowestAmazonPrice) * 0.20; 
     $payPrice = round($Price, 0); //to round the price up or down to the nearest $ 
     break; 

ho capito che se uso round ($ prezzo, 2); che avrò 2 cifre decimali, ma c'è un modo per arrotondare ai 50 cent più vicini?

risposta

12

Moltiplicare per 2, rotonda a 0 nella cifra di cui sopra che si desidera arrotondare a 0,5 (round per il punto decimale nel tuo caso quelli), dividere per 2.

che vi darà l'arrotondamento al più vicino .5, aggiungere uno 0 e arrotondare al più vicino .50.

Se si desidera che il più vicino .25 fare lo stesso, ma moltiplicare e dividere per 4.

+0

Grazie, che ha fatto il trucco. – Jim

24

Alcune semplice matematica dovrebbe fare il trucco. Invece di arrotondare ai 50 cent più vicini, arrotondare il doppio del valore di $price al dollaro più vicino, quindi a metà.

$payprice = round($Price * 2, 0)/2; 
0

Manual

Dal manuale: echo round(1.95583, 2); // 1.96

float round (float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]]) 

val 
The value to round 

precision 
The optional number of decimal digits to round to. 

mode 
One of PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, or PHP_ROUND_HALF_ODD. 

basta cambiare a: echo round(1.54*2, 0)/2; // 1.5

4
function roundnum($num, $nearest){ 
    return round($num/$nearest) * $nearest; 
} 

esempio:

$num = 50.55; 
$nearest = .50; 
echo roundnum($num, $nearest); 

rendimenti

50.50 

questo può essere utilizzato per arrotondare a nulla, 5cents, 25cents, ecc ...

credito per ninjured: http://forums.devshed.com/php-development-5/round-to-the-nearest-5-cents-537959.html

+0

Grazie! Hai un tempismo perfetto, mi è stato appena detto che dovevo cambiare l'arrotondamento al più vicino 25 centesimi. Questo funziona perfettamente. – Jim

0

numero dividere per più vicino, fare il ceil, quindi moltiplicare per il più vicino per ridurre le cifre significative.

function rndnum($num, $nearest){ 
    return ceil($num/$nearest) * $nearest; 
} 

Es.

eco rndnum (95.5,10) restituisce 100

eco rndnum (94.5,1) restituisce 95

1

Si noti che se si utilizza pavimento invece di turno, è necessario un turno in più a causa della precisione interna dei numeri float.

function roundnum($num, $nearest){ 
    return floor(round($num/$nearest)) * $nearest; 
} 

$num = 16.65; 
$nearest = .05; 
echo roundnum($num, $nearest); 

altrimenti restituirà 16.60 invece di 16.65

+0

Per me questo sta causando 16.64 restituire 16.65. L'uso di 'floor ($ num/$ nearest) * $ nearest' non funziona, come hai detto, causando 16.65 per tornare a 16.60. In questo caso, il trucco consiste nel fare ciò: 'floor ($ num * (1/$ più vicino)) * $ più vicino». Non sono esattamente sicuro del perché funzioni. – David

+0

@David hai ragione davvero. Grazie per la soluzione.Non vedo _why_ funziona, ma funziona! –

Problemi correlati