php,var_export失败了

时间:2015-08-21 21:14:27

标签: php wtforms wtforms-json wtfpl

很简单。请考虑以下代码:

var_export (11.2);

返回

11.199999999999999

使用Php 5.6

WTF吗

1 个答案:

答案 0 :(得分:4)

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

  

从版本5.4.22看起来var_export使用了   serialize_precision ini设置,而不是使用的精度   用于浮点数的正常输出。结果是因为   例如版本5.4.22将输出var_export(1.1)   1.1000000000000001(17是默认精度值),而不是之前的1.1。

很高兴知道。我也不知道这种变化。

  

<强> serialize_precision

     

自PHP 4.3.2起可用。在PHP 5.3.5之前,默认值为100。

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

警告

使用ini_set()时要非常小心,因为这可能会进一步改变代码的行为。 A&#34;安全&#34;方法是使用这样的东西:

$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()的函数通常是更好的选择。