2016-06-02 3 views
0
$totalFileFloat = (float) (str_replace(',', '', $totalFile)); 
    $total = (float) ($total); 
    var_dump([$totalFileFloat, $total]); 
    var_dump($totalFileFloat != $total); 
    var_dump($totalFileFloat !== $total); 
    var_dump($totalFileFloat === $total); 
    var_dump($totalFileFloat == $total); 

результат код:При сравнения те же значения PHP возвращают ложные

array(2) { [0]=> float(183024.22) [1]=> float(183024.22) } 

bool(true) 
bool(true) 
bool(false) 
bool(false) 

Может кто-нибудь объяснить это?

+0

Использование $ totalFileFloat [0] и $ общего [0] для сравнения == –

+1

$ общими и $ totalFileFloat НЕ массивы :) – belov91

+0

Aaaah ... МАГИЯ поплавков и типов в PHP ... – Amarnasan

ответ

0

Документация сказать не сравнивать числа с плавающей, но если вам нужно сравнить можно использовать bccomp (http://php.net/manual/en/function.bccomp.php)

А вот пример:

<?php 
$a = 0.17; 
$b = 1 - 0.83; //0.17 

echo "$a == $b (core comp oper): ", var_dump($a==$b); 
echo "$a == $b (with bc func) : ", var_dump(bccomp($a, $b)==0); 



Result: 
    0.17 == 0.17 (core comp oper): bool(false) 
    0.17 == 0.17 (with bc func) : bool(true) 
0

Это происходит, вероятно, из-за $ общей и $ totalFileFloat точно не совпадают. var_dump показывает это вам как одно и то же, но на самом деле это не так. См. Также http://php.net/manual/en/language.types.float.php#113703

0

Hey floating point номера ограничены precision.

Посмотрите в моем примере

<?php 
$x = 8 - 6.4; // which is equal to 1.6 
$y = 1.6; 
var_dump($x == $y); // output bool(false) 

var_dump(round($x) == round($y)) // output bool(true) 
?> 

Согласно делать Phpmanual мы не должны сравнивать float nubers напрямую. Для получения дополнительной информации, пожалуйста, посетите http://php.net/manual/en/language.types.float.php

Смежные вопросы