числа — PHP округляет значения с плавающей точкой и сравнение результатов не так, как должно быть

У меня есть функция 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 является ложным? Где проблема в этой функции и результате?

1

Решение

Просто измените последнюю строку на эту, чтобы увидеть разницу:

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

и многое другое … 🙂

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector