我正在try 制作一种算法,该算法将根据以下条件进行循环:
- 1或2美分-向下舍入为"0"
- 3美分或4美分-向上舍入到5美分
- 5美分--还剩5美分
- 6或7美分--四舍五入至5美分
- 8或9美分-向上舍入为"0"
因此,它应该如下所示:
PRICE| AFTER
9.90 | 9.90
9.91 | 9.90
9.92 | 9.90
9.93 | 9.95
9.94 | 9.95
9.95 | 9.95
9.96 | 9.95
9.97 | 9.95
9.98 | 10.0
9.99 | 10.0
10.0 | 10.0
我的代码在这里,但看起来很奇怪. 对于类似10.99的数字,结果变为10.10:
function roundDown(float $price): float
{
[$number, $decimals] = explode('.', sprintf('%.2f', $price));
[, $second] = str_split($decimals);
$table = [
0 => 0,
1 => -1,
2 => -2,
3 => 2,
4 => 1,
5 => 0,
6 => -1,
7 => -2,
8 => 2,
9 => 1,
];
return $number . '.' . str_pad((float)$decimals+(float)$table[$second], 2, '0', STR_PAD_LEFT);
}
先谢谢你.