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