首页 > 解决方案 > PHP 7.3 浮点数计算后的错误行为

问题描述

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

计算0.012714 * 100PHP值的时候是1.2714,但是对比和json_encodeing值显示真实值不同。

这里是最简单的例子

<?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]

如何恢复旧的行为?

标签: floating-pointphp-7

解决方案


这似乎与此错误报告有关,重新创建之前行为的一种易于应用的解决方案是将值PHP 7.1简单地设置为.serialize_precision14

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

推荐阅读