округлить число до ближайшего 0,2 с PHP - PullRequest
6 голосов
/ 28 апреля 2009

Я создаю эту рейтинговую систему, используя пятиконечные звезды. И я хочу, чтобы заголовок включал средний рейтинг. Итак, я создал звезды, показывающие 1/5. Используя «1.2», я получу полную звезду и одну точку на следующей звезде и так далее ...

Но я не нашел хорошего способа округления до ближайшего .2 ... Я подумал, что могу умножить на 10, затем округлить, а затем запустить переключатель на округ 1 до 2, 3 до 4 и так далее. Но это кажется утомительным и ненужным ...

Ответы [ 5 ]

28 голосов
/ 28 апреля 2009
round(3.78 * 5) / 5 = 3.8
18 голосов
/ 28 апреля 2009

Гибкое решение

function roundToNearestFraction( $number, $fractionAsDecimal )
{
     $factor = 1 / $fractionAsDecimal;
     return round( $number * $factor ) / $factor;
}

// Round to nearest fifth
echo roundToNearestFraction( 3.78, 1/5 );

// Round to nearest third
echo roundToNearestFraction( 3.78, 1/3 );
4 голосов
/ 28 апреля 2009
function round2($original) {
    $times5 = $original * 5;
    return round($times5) / 5;
}
3 голосов
/ 28 апреля 2009

Итак, ваш итог 25, можно ли не использовать поплавки и использовать 1-> 25/25? Таким образом, требуется меньше вычислений ... (если есть)

1 голос
/ 06 апреля 2012

Почему все дают решения, которые требуют более глубокого осмотра или преобразования? Хотите 0,2? Тогда:

round($n / 0.2) * 0.2; // $n = 3.78 / 0.2 = 18.9 (=) 19 * 0.2 = 3.8 //

Хотите 5? Тогда:

round($n / 5) * 5; // $n = 17 / 5 = 3.4 (=) 3 * 5 = 15 //

Это так просто.

...