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?

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
```

### Answer：

Please note that the answer isn’t really water tight. Since we’re dealing with floats here it’s not guaranteed that when you divide the rounded number by the denominator it returns a neatly round number. It may return 1.499999999999 instead of 1.5. It’s the nature of floating point numbers.

Another round is needed before returning the number from the function.

Just in case someone lands here from google like I did 🙂

### Answer：

Look at example #3 on here and it is half of your solution – http://php.net/manual/en/function.round.php

### Answer：

According to the `mround()`

function in Excel:

```
function MRound($num,$parts) {
$res = $num * $parts;
$res = round($res);
return $res /$parts;
}
echo MRound(-1.38,4);//gives -1.5
echo MRound(-1.37,4);//gives -1.25
echo MRound(1.38,4);//gives 1.5
echo MRound(1.37,4);//gives 1.25
```