# Rounding numbers to special values in PHP - e. g. "nice prices"

Sometimes you need to round numbers to special values. Maybe you have a shop and want to calculate your selling prices automatically, but you don't like prices like 12.52 USD.

Here's a small PHP function that can be used in many different ways to solve this problem.

```function round_to(\$number, \$step = 1, \$sub = 0) {
\$number += \$sub; // to ensure it rounds in the correct way
if(\$step == 0 || \$step == 1) return round(\$number) - \$sub;

return (round(\$number / \$step) * \$step) - \$sub;
}
```

This little helper enables rounding to each "nice value" you like to have.

For example:

round_to(12.34, 0.5, 0.01); results in 12.49 (it rounds to the next 0.5-step and reduces by 0.01)
round_to(12.34, 5, 0.01); results in 9.99 (it rounds to the next 5-step value and reduces by 0.01)
round_to(10.7, 2); results in 10.0 (rounds to the next even number)

Of course, you should use other values for big numbers than you use for small ones. For example using a further if-clause:

```\$x = somenumber; // e. g. your base price
\$a = \$x * 1.2; // 20% margin

if(\$a < 5) \$a = \$a; // do nothing
elseif(\$a < 10) \$a = round_to(\$a, 0.5, 0.01);
elseif(\$a < 50) \$a = round_to(\$a, 1, 0.01);
elseif(\$a < 150) \$a = round_to(\$a, 5, 0.01);
else \$a = round_to(\$a, 10, 0.10);
```

In this example the price of sale would be:
1.20 USD for a base price of 1.00 USD
12.99 USD for a base price of 11.00 USD (11 * 1.2 = 13.20)
289.90 USD for a base price of 243.34 USD (243.34 * 1.2 = 292.01)

Have fun with "nice prices" ;) view as pdf | print