Я хочу округлить число, и мне нужно собственное целое число, потому что я хочу использовать его в качестве ключа массива. Первое «решение», которое приходит на ум, – это:
$key = (int)round($number)
Однако я не уверен, что это всегда будет работать. Насколько я знаю (int)
просто усекает любые десятичные числа, и поскольку round($number)
возвращает float с теоретически ограниченной точностью, возможно ли, что round($number)
возвращает что-то вроде 7.999999 … а затем $key
вместо 7 из 8?
Если эта проблема действительно существует (я не знаю, как ее проверить), как ее можно решить? Может быть:
$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily
Есть ли лучшее решение, чем это?
Для правильного округления плавания вы можете использовать:
ceil($number)
: округлить round($number, 0)
: округление до ближайшего целого числа floor($number)
: округлить Эти функции возвращают float, но из комментария Niet the Dark Absol : «Целые числа, хранящиеся в поплавках, всегда точны, примерно до 2 ^ 51, что намного больше, чем может быть сохранено в int в любом случае».
Существует три функции для обработки чисел округления: круглые, потолочные (округлые), пол (округлые). Я не уверен, какой из них вы хотите использовать.
round()
, без набора точности всегда округляется до ближайшего целого числа. По умолчанию круглые раунды равны нулю.
Так:
$int = 8.998988776636; round($int) //Will always be 9 $int = 8.344473773737377474; round($int) //will always be 8
Итак, если ваша цель – использовать это как ключ для массива, это должно быть хорошо.
Разумеется, вы можете использовать режимы и точность, чтобы точно указать, как вы хотите, чтобы round()
вел себя так. Смотрите это .
ОБНОВИТЬ
На самом деле вас больше интересует intval :
echo intval(round(4.7)); //returns int 5 echo intval(round(4.3)); // returns int 4
Целые числа, хранящиеся в полях с плавающей точкой, всегда точны, примерно до 2 53 , что намного больше, чем может быть сохранено в int так или иначе. Я ничего не переживаю.
Раунд до ближайшего целого
$ key = round ($ number, 0);