Код: Выделить всё
$we_all_float_down_here = (float) 3467.60009765625;
$expected_string = '3467.60009765625';
var_dump($expected_string === (string) $we_all_float_down_here);
echo "Last chars gets stripped:\n"
. (string) $we_all_float_down_here . "\n"
. $expected_string;
Код: Выделить всё
bool(false)
Last chars gets stripped:
3467.6000976562
3467.60009765625
https://onlinephp.io/c/b3af3
Примечание:
- не исправит то, что некоторые значения с плавающей запятой сохраняются неточно.
Код: Выделить всё
ini_set('precision', 100); - может работать для некоторых чисел, как в моем примере, но это также не меняет того факта, что другие числа будут слишком неточными, или, скорее, что некоторые числа с плавающей запятой идентичны другим по-разному выглядящим числам с плавающей запятой. (В десятичном формате .99999... (математически правильно) идентично 1, даже если оно выглядит по-другому. В php из-за двоичного представления и ограничений памяти числа с плавающей запятой для 3467.6000976563 и 3467.60009765625318323146 имеют вид (математически-неверно) здесь идентично.)
Код: Выделить всё
number_format