PHP 7.3 浮点数计算后的不正确行为

PHP 7.3 float numbers incorrect behavior after calculation

以下在 PHP 7.3.15 中对我来说有一个莫名其妙的行为:

在计算 0.012714 * 100 时,PHP 的值为 1.2714,但与 json_encode 进行比较后发现实际值不同。

这里是最简单的例子

<?php
var_dump((0.012714 * 100) === 1.2714); # false WHY? Because the real value is 1.2713999999999999
echo json_encode([(0.012714 * 100)]); # results in [1.2713999999999999]

我真的不明白这是怎么回事,这曾经在 PHP 7.0 中完美运行。

我读过 json_encode 和浮点数,但事实并非如此,因为比较也失败了。

奇怪的是,这与完全相同的代码完美地工作,但数字减少了十分之一。

<?php
var_dump((0.12714 * 10) === 1.2714); # true 
echo json_encode([(0.12714 * 10)]); # results in [1.2714]

如何恢复旧行为?

这似乎与此 bug report 相关,在 PHP 7.1 之前重新创建行为的一个简单适用的解决方案是简单地将 serialize_precision 值设置为 14.

<?php
ini_set('serialize_precision', 14);