为什么在PHP中0.1 + 0.2-0.3 = 5.5511151231258E-17 - php

This question already has an answer here:

Closed 8 years ago.

Possible Duplicate:
The accuracy of PHP float calculate

当我在eclipse中执行以下代码时,结果不是0,而是5.5511151231258E-17

$a = 0.1+0.2-0.3;
echo $a;

有人可以告诉我为什么吗?

参考方案

这是因为浮点数的精度有限。

您可以在this page in the PHP manual上找到有关此特征的更多信息。

浮点数的精度有限。虽然取决于
在系统中,PHP通常使用IEEE 754双精度格式,
由于订单中的四舍五入,这将提供最大的相对误差
1.11e-16。非基本算术运算可能会带来更大的结果
错误,当然,在以下情况下也必须考虑错误提示
几个操作是复杂的。

此外,确切可表示为
以10为底的浮点数,例如0.1或0.7,没有
精确表示为以2为底的浮点数,即
内部使用,无论尾数大小如何。因此,他们
没有一个,就不能转换成内部二进制副本
精度损失小。这可能会导致结果混乱:
例如,floor((0.1 + 0.7)* 10)通常将返回7而不是
预期8,因为内部表示将类似于
7.9999999999999991118 ....

因此,永远不要相信浮点数结果到最后一位数字,并且永远不要
比较浮点数是否相等。如果精度更高
必要的任意精度数学函数和gmp函数
可用。

请注意,这不是PHP特有的特征; it is just the way floating point numbers work。

AJAX + PHP +下载mPDF生成的文件 - php

我正在创建一个应用程序,用户可以访问查看表中显示的许多PDF。每行还具有复选框,允许用户检查或不检查我稍后将描述的下一个动作。这些复选框位于表单标记内,然后是一个提交按钮,该按钮通过POST方法通过AJAX REQUEST将数组内的所有文件ID发送到PHP文件。AJAX请求如下所示:$.ajax({ url: link, type: 'POST&#…

在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…