浮点数PHP的求解方法不精确,计算不完整。

浮点数PHP的求解方法不精确,计算不完整。
浮点数计算结果的比较

浮点数的一个例子如下:

复制代码代码如下所示:

$ = 0.2 + 0.7;

$ = 0.9;

var_dump($ = $ B);
打印的结果是:bool(假)。也就是说,0.2 + 0.7的计算结果不等于0.9,这显然违背了我们的常识。

对于这个问题,PHP官方手册解释了一遍:很显然,一个简单的小数,如0.2,不能转换为内部二进制格式不失去一点点的准确性。这是事实,这是不可能准确地用有限位数表达一定的小数相关。例如,小数1 / 3变成0 3333333…

我们以双精度格式打印上述变量:

复制代码代码如下所示:

$ = 0.2 + 0.7;

$ = 0.9;

printf(% 0.20f

回声';

printf(% 0.20f
输出结果如下:

复制代码代码如下所示:

0.89999999999999991118

0.90000000000000002220
很明显,事实上,如浮点数据,其精度已失去了它的一部分,是不完全准确的。所以不要相信浮点数的结果精确到最后,不比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,但问题处理浮点数在计算机内部!同样的问题也会在如C语言中,java和其他语言。

因此,为了比较两个浮点数,我们需要在我们需要的精度范围内控制它们,然后比较它们。所以我们用bcadd()函数来添加和变换浮点数精度为字符串。

复制代码代码如下所示:

var_dump(bcadd(0.2,0.7,1)= = 0.9); / /输出:bool(真的)
浮点数舍入

在PHP细胞层,在文本的整体功能,有实例:

复制代码代码如下所示:

< PHP

回声细胞(2.1/0.7); / /输出:4

>
在浮点数的计算之后,我们知道这并不完全是浮点数计算结果的结果。

复制代码代码如下所示:

< PHP

printf(% 0.20f (2.1 / 0.7)); / /输出:3.00000000000000044409

>
在讨论浮点数的计算之后,我们知道这是浮点数不完全计算结果引起的,因此我们可以用圆函数来处理它。

复制代码代码如下所示:

< PHP

回声细胞(圆((((2.1 / 0.7),1));

>
虽然圆()函数按照指定的精度是四到五个舍,但保留小数点,对舍入结果没有影响
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部