2012-07-27 60 views
11

我有下面的代碼舍入我的數額到最近的美元:四捨五入到最接近的50美分

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; 

我明白,如果我使用圓形($價格,2);我會有2位小數,但有沒有辦法舍入到最接近的50美分?

回答

12

乘以2,輪0以上要通過2

四捨五入爲0.5(四捨五入到那些在你的情況下小數點後一位),除這將會給你四捨五入到最接近的數字.5,加上一個0,你舍入到最接近的.50。

如果你想就近0.25由4

+0

謝謝,這確實起作用。 – Jim 2012-07-27 17:52:02

24

做相同的,但乘,除一些簡單的數學應該做的伎倆。而不是四捨五入到最接近的50美分,將$price加倍到最接近的美元,然後是一半。

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

Manual

從手冊: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. 

只是更改爲:echo round(1.54*2, 0)/2; // 1.5

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

如:

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

回報

50.50 

這可以用來四捨五入到任何東西,5cents,25cents等..

信貸ninjured:通過最近 http://forums.devshed.com/php-development-5/round-to-the-nearest-5-cents-537959.html

+0

謝謝!你有完美的時機,我剛剛被告知我必須將四捨五入改爲最接近的25美分。這工作完美。 – Jim 2013-07-19 13:30:36

0

鴻溝號,請ceil,然後乘以最接近以減少有效數字。

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

Ex。

回聲rndnum(95.5,10)返回100

回聲rndnum(94.5,1)返回95

1

請注意,如果你使用的地板,而不是圓的,你需要的,因爲內部精密的額外回合的浮點數。

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

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

否則將返回16.60代替16.65

+0

對我而言,這導致16.64返回16.65。正如你所說的,使用'floor($ num/$ nearest)* $ nearest'也不起作用,導致16.65返回16.60。在這種情況下的訣竅就是這樣做:'floor($ num *(1/$ nearest))* $ nearest'。我不完全確定這是爲什麼起作用。 – David 2017-10-16 07:13:45

+0

@大衛你是對的。感謝您的解決方案。我沒有看到_why_它的作品,但它的工作原理! – 2017-10-18 09:53:07