$a = '35';
$b = '-34.99';
echo ($a + $b);
Run Code Online (Sandbox Code Playgroud)
结果在0.009999999999998
怎么了?我想知道为什么我的程序会报告奇怪的结果.
为什么PHP没有返回预期的0.01?
这不是一个问题,因为它更多的是意识到.我更新了一个json_encode()用于PHP7.1.1 的应用程序,我看到一个问题,浮动被更改为有时延伸出17位数.根据文档,serialize_precision在编码double值时,PHP 7.1.x开始使用而不是精度.我猜这导致了一个示例值
472.185
成为
472.18500000000006
在那个价值经历之后json_encode().自从我发现以来,我已经恢复到PHP 7.0.16并且我不再有问题了json_encode().我还尝试在恢复到PHP 7.0.16之前更新到PHP 7.1.2.
这个问题背后的原因确实源于PHP - 浮点数精度,但最终所有原因都是因为从精度到serialize_precision使用的变化json_encode().
如果有人知道这个问题的解决方案,我会非常乐意听取推理/修复.
摘自多维数组(之前):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
Run Code Online (Sandbox Code Playgroud)
经过json_encode()......之后
"staticYaxisInfo":
{
"17":
{
"variable_id": "17",
"static": "1",
"min": 0,
"max": 472.18500000000006,
"locked_static": "1"
}
},
Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的问题.如果我减去2个浮点数,其中一个是数学运算的结果,我得到一个错误的值.
例:
var_dump($remaining);
var_dump($this->hours_sub['personal']);
echo $remaining-$this->hours_sub['personal'];
Run Code Online (Sandbox Code Playgroud)
这是它的输出:
float 5.4
float 1.4
5.3290705182008E-15
Run Code Online (Sandbox Code Playgroud)
5.4-1.4应为4 如果我添加两个值,结果是正确的.
我的错误在哪里?它不能成为一个四舍五入的问题.