php intval () и floor () возвращают слишком низкое значение?

Поскольку тип данных с плавающей точкой в PHP является неточным, а FLOAT в MySQL занимает больше места, чем INT (и неточный), я всегда сохраняю цены как INT, умножая их на 100, прежде чем сохранять, чтобы гарантировать, что мы имеем ровно 2 десятичных знака точности , Однако я считаю, что PHP плохо себя ведет. Пример кода:

echo "<pre>";

$price = "1.15";
echo "Price = ";
var_dump($price);

$price_corrected = $price*100;
echo "Corrected price = ";
var_dump($price_corrected);


$price_int = intval(floor($price_corrected));
echo "Integer price = ";
var_dump($price_int);

echo "</pre>";

Произведенная продукция:

Price = string(4) "1.15"
Corrected price = float(115)
Integer price = int(114)

Я удивлен. Когда окончательный результат оказался ниже ожидаемого на 1, я ожидал, что результаты моего теста будут выглядеть примерно так:

Price = string(4) "1.15"
Corrected price = float(114.999999999)
Integer price = int(114)

который продемонстрировал бы неточность типа поплавка. Но почему пол (115) возвращает 114 ??

Ответы на вопрос(5)

Ваш ответ на вопрос