2012-07-27 274 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