Учитывая этот код PHP:
// total is 71.24 (float) $value = $total * 100; var_dump($value); $valuecast = (int)$value; var_dump($valuecast); settype($value, 'int'); var_dump($value);
var_dump ($ value) дает float (7124)
var_dump ($ valuecast) дает int (7123)
var_dump ($ value) после settype дает int (7123)
Как я могу получить правильное преобразование типов?
Для float to int я предлагаю round
. Это связано с неточностями IEEE float.
Из руководства PHP на TypeCasting Float to Integer
Предупреждение
Никогда не добавляйте неизвестную фракцию в целое число, так как это иногда может привести к неожиданным результатам.
<?php echo (int) ( (0.1+0.7) * 10 ); // echoes 7! ?>
См. Также предупреждение о точности поплавка .