У меня есть функция PHP как
function func(){
function round_up($value, $decPlaces) {
return ceil($value * pow(10, $decPlaces)) / pow(10, $decPlaces);
}
$a=21.31;
$b=2;
$c=10.64;
$d=0.03;
$xxx=$a;
$yyy=round_up($b*$c,2)+round_up($d,2);
$zzz=($xxx===$yyy);
var_dump($xxx,$yyy,$zzz);
}
Эта функция выводит
float (21.31) float (21.31) bool (false)
Кажется, ххх равен yyy, но почему zzz является ложным? Где проблема в этой функции и результате?
Просто измените последнюю строку на эту, чтобы увидеть разницу:
var_dump (number_format ($ xxx, 20), number_format ($ yyy, 20), $ zzz);
Вот некоторая полезная информация о проблеме:
https://stackoverflow.com/a/3148991/4180451 https://secure.php.net/manual/en/language.types.float.php
https://andy-carter.com/blog/don-t-trust-php-floating-point-numbers-when-equating
и многое другое … 🙂
Других решений пока нет …