11

我有以下代码将我的金额四舍五入到最接近的美元:

    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;

我知道如果我使用 round($Price, 2); 我会有 2 位小数,但有没有办法四舍五入到最接近的 50 美分?

4

6 回答 6

25

一些简单的数学应该可以解决问题。不是四舍五入到最接近的 50 美分,而是四舍五入到$price最接近的美元,然后是一半。

$payprice = round($Price * 2, 0)/2;
于 2012-07-27T17:36:57.913 回答
17

乘以 2,在您想要四舍五入到 0.5 的数字中四舍五入到 0(在您的情况下四舍五入到小数位),然后除以 2。

这将使您四舍五入到最接近的 0.5,加上一个 0,您将四舍五入到最接近的 0.50。

如果您想要最接近的 0.25,请执行相同的操作,但要乘以并除以 4。

于 2012-07-27T17:36:38.037 回答
5
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

于 2013-07-18T13:20:49.600 回答
1

将数字除以最近,做 ceil,然后乘以最近以减少有效数字。

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

前任。

echo rndnum(95.5,10) 返回 100

echo rndnum(94.5,1) 返回 95

于 2014-11-18T15:04:09.463 回答
1

请注意,如果您使用 floor 而不是 round,由于浮点数的内部精度,您需要额外的一轮。

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

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

否则它将返回 16.60 而不是 16.65

于 2015-02-11T10:33:51.380 回答
0

手动的

从手册: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

于 2012-07-27T17:39:00.277 回答