php,var_导出失败,带浮点

php,var_导出失败,带浮点,php,wtforms,wtforms-json,wtfpl,Php,Wtforms,Wtforms Json,Wtfpl,很简单。考虑这个代码: var_export (11.2); 这是我的回报 11.199999999999999 使用PHP5.6 wtf?来自php.net手册页上的评论: 看起来像是因为版本5.4.22 var_导出使用 序列化_precision ini设置,而不是使用的精度设置 用于浮点数的正常输出。由于 版本5.4.22,例如var_导出(1.1)将输出 1.10000000000001(17为默认精度值),而不是之前的1.1 很高兴知道。我也没有意识到这一变化 从PHP4.3.

很简单。考虑这个代码:

var_export (11.2);
这是我的回报

11.199999999999999
使用PHP5.6


wtf?来自php.net手册页上的评论:

看起来像是因为版本5.4.22 var_导出使用 序列化_precision ini设置,而不是使用的精度设置 用于浮点数的正常输出。由于 版本5.4.22,例如var_导出(1.1)将输出 1.10000000000001(17为默认精度值),而不是之前的1.1

很高兴知道。我也没有意识到这一变化

从PHP4.3.2开始提供。在PHP5.3.5之前,默认值是100

因此,我们可以使用熟悉的行为:
ini_集('serialize_precision',100)

警告 使用ini_set()时要非常小心,因为这可能会进一步改变代码的行为。“安全”的方法是使用以下内容:

$storedValue = ini_get('serialize_precision');
ini_set('serialize_precision', 100);
// Your isolated code goes here e.g var_export($float);
ini_set('serialize_precision', $storedValue);
这确保了代码中更深层次的更改不会受到影响

通常,在代码中使用ini_set()应该被认为是危险的,因为
它可能有严重的副作用。重构代码,使其在没有ini_set()的情况下运行通常是一个更好的选择。

看看同样的核心问题,尽管这不是一个重复的问题。在链接的帖子中没有提到
var\u export
serialize\u precision
。@ficuscr这几乎不相关。OP显然不知道浮动是如何表示和打印出来的。(wtf和愚蠢的标签完全是免费的)。这里的var_导出没有什么独特之处。@mario Roger。我会读更多关于这个话题的文章。谢谢你的回复。直到你指出来才注意到标签。