Подтвердить что ты не робот

Округление до ближайших 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;

Я понимаю, что если я использую раунд ($ Price, 2); что у меня будет 2 десятичных знака, но есть ли способ округлить до ближайших 50 центов?

4b9b3361

Ответ 1

Умножьте на 2, округлите до 0 в цифре выше, вы хотите округлить до .5 (округлите до десятичной точки в вашем случае), разделите на 2.

Это даст вам округление до ближайшего .5, добавьте 0, и округление округляется до ближайшего .50.

Если вы хотите, чтобы ближайший .25 сделал то же самое, но умножьте и разделите на 4.

Ответ 2

Некоторые простые математики должны делать трюк. Вместо округления до ближайших 50 центов, округлите в два раза $price до ближайшего доллара, затем наполовину.

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

Ответ 3

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

например:

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

возвращает

50.50

Это можно использовать для округления до чего угодно, 5 центов, 25 центов и т.д.

кредит ниндженю: http://forums.devshed.com/php-development-5/round-to-the-nearest-5-cents-537959.html

Ответ 4

Обратите внимание: если вы используете пол вместо раунда, вам нужен дополнительный раунд из-за внутренней точности чисел с плавающей запятой.

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

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

В противном случае он вернет 16.60 вместо 16.65

Ответ 5

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

Ответ 6

разделите число ближайшим, сделайте ceil, затем умножьте на ближайший, чтобы уменьшить значимые цифры.

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

Исх.

echo rndnum (95.5,10) возвращает 100

echo rndnum (94.5,1) возвращает 95