Как определить, что число с плавающей точкой составляет половину числа? - PullRequest
0 голосов
/ 22 января 2011

Какой самый эффективный способ сказать, что значение с плавающей запятой - это половина целого числа, например 0,5, 1,5, 10,5?

Первое, что приходит мне в голову:

$is_half = (($number - floor($number)) === 0.5);

Есть ли лучшие решения?

Ответы [ 2 ]

4 голосов
/ 22 января 2011

Из-за погрешностей точности с плавающей запятой вы обычно должны проверять, чтобы разница была ниже некоторого небольшого значения (но учтите, что 0.5 представляется точно, поэтому это не должно быть проблемой, но в целом это поплавки).

Так что ваш код подходит для вашего конкретного смысла, в общем, вы можете захотеть сделать:

if (abs($number - floor($number) - $decimal) < 0.0001) {

Где $decimal ваша разница: 0.5.

0 голосов
/ 22 января 2011
if(abs($number) - (int)(abs($number)) == 0.5) {
    // half of an integer.
}
...