Округление до 0,5 вверх и вниз и если 0 после точки доцима - PullRequest
0 голосов
/ 22 февраля 2019

Эй, у меня есть следующие проблемы, я получаю оценки и получаю среднее значение, но я склоняюсь к следующему:

1,2222222222222 = 1
1,2666666666666 = 1,5
2,3635345435435 = 2.5
2,567435 345345 = 2.5
3.5709 = 3
29,3003453450 = 29

Я хочу, чтобы все числа соответствовали большинству их .5, но когда у них нет десятичной дробитогда НЕ должно отображаться 3.0 или 4.0, просто число без десятичных знаков.

на данный момент у меня есть этот код:

function roundRating($rating) {
    return floor($rating * 2) / 2;
}

может кто-нибудь мне помочь?приветствует

1 Ответ

0 голосов
/ 22 февраля 2019

Вот предложение.См. Комментарии для пошагового объяснения.

<?php

$float = 1.753242342;

// Modulo operator (%) does not return float remainder. Use fmod().
$remainder = fmod($float, 1);

/* Apply rounding logic here.
 * It isn't entirely clear to me what your intended behavior is.
 * Should 0.75 round up to 1 or down to 0.5?
 * I will leave this to you to figure out.
 */
$roundedRemainder = ($remainder >= 0.25)?0.5:0;

$int = $float - $remainder;
$result = $int + $roundedRemainder;
// If remainder is zero, cast to int to remove remainder.
if (fmod($result, 1) == 0)
        $result = (int)$result;

echo "Int: " . $int . "<br>";
echo "Remainder: " . $remainder . "<br>";
echo "Rounded remainder: " . $roundedRemainder . "<br>";
echo "Result: " . $result . "<br>";

Выходы:

Int: 1
Remainder: 0.753242342
Rounded remainder: 0.5
Result: 1.5
...