Rounding to nearest fraction (half, quarter, etc.)

ceil, floor, php, printf, rounding

Solution

Since you're looking for fourths (`.00`, `.25`, `.50`, `.75`), multiply your number by 4, round to nearest whole number as desired (`floor` if down, `ceil` if up), then divide by 4.

1.32, down to nearest fourth:

1.32 * 4 = 5.28 floor(5.28) = 5.00 5.00 / 4 = 1.25

Same principle applies for any other fractions, such as thirds or eighths (`.0`, `.125`, `.25`, `.375`, `.5`, `.625`, `.75`, `.875`). For example:

1.77, up to nearest eighth:

1.77 * 8 = 14.16 ceil(14.16) = 15.00 15.00 / 8 = 1.875

Just for fun, you could write a function like this:

function floorToFraction($number, $denominator = 1)
{
    $x = $number * $denominator;
    $x = floor($x);
    $x = $x / $denominator;
    return $x;
}

echo floorToFraction(1.82);      // 1
echo floorToFraction(1.82, 2);   // 1.5
echo floorToFraction(1.82, 3);   // 1.6666666666667
echo floorToFraction(1.82, 4);   // 1.75
echo floorToFraction(1.82, 9);   // 1.7777777777778
echo floorToFraction(1.82, 25);  // 1.8

Problem

So, I need to create the following functions but my head can't think of any possibility in PHP without complicated math. - Round always up to the nearest decimal (1.81 = 1.90, 1.89 = 1.90, 1.85 = 1.90) - Round always down to the nearest decimal (1.81 = 1.80, 1.89 = 1.80, 1.85 = 1.80) - Round always up to the nearest x.25 / x.50 / x.75 / x.00 (1.81 = 2, 1.32 = 1.50) - Round always down to the nearest x.25 / x.50 / x.75 / x.00 (1.81 = 1.75, 1.32 = 1.25) - Round always up to the nearest x.50 / 1 (1.23 = 1.50, 1.83 = 2) - Round always down to the nearest x.50 / 1 (1.23 = 1, 1.83 = 1.50) I have searched on Google for 2 hours now and the only things that came up were Excel forums. Is it possible with some simple lines of PHP?

Original source