1

Вопрос для знатоков php. Есть код:

if($timeDiff > 24)
{
    $Tfail = $period - 0;
    var_dump($timeDiff); // float 24
}
else
{
    $Tfail = $period - $timeDiff;
}

$timeDiff вычисляется чуть ранее из нескольких интеграторов. Код периодически заходит в первую ветку. При этом дамп переменной: float 24.
Вопрос: почему?

zenith
  • 2,434
  • 2
  • 27
  • 47
  • @artkil такой вариант действительно работает, хотя мне больше по душе
    if(round($timeDiff,2) > 24)
    
    – zenith Mar 12 '13 at 06:28
  • а как вы добились float(24) ?
    php -r '$a=24;settype($a,"float");$a+=0.00001;$a-=0.00001; echo var_dump($a);echo var_dump($a);';php -v
    double(24)
    double(24)
    PHP 5.4.4-14 (cli) (built: Mar  4 2013 14:08:43) 
    Copyright (c) 1997-2012 The PHP Group
    Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
       with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans
    
    – zb' Mar 12 '13 at 06:40
  • @eicto хз. А вообще я не понял ваш вопрос. – zenith Mar 12 '13 at 07:51
  • у меня в var_dump все float - double – zb' Mar 12 '13 at 08:37
  • @eicto узнаю, скажу. – zenith Mar 12 '13 at 08:55

1 Answers1

2

Скорее всего это из-за внутреннего представления вещественных чисел в памяти. Сделайте в условии так: if ($timeDiff - 24 > 0.00001)

artkil
  • 257
  • 1
    Вы бы хоть модуль разницы брали...
      if (abs($timeDiff - 24) > 0.00001)
    
    – alexlz Mar 12 '13 at 09:19