在PHP中对浮点数计算取整不准确如何解决-创新互联

在PHP中对浮点数计算取整不准确如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站建设、做网站、东胜网络推广、微信小程序开发、东胜网络营销、东胜企业策划、东胜品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;成都创新互联公司为所有大学生创业者提供东胜建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

php有什么用

php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自创新的语法,主要用来做网站开发,许多小型网站都用php开发,因为php是开源的,从而使得php经久不衰。

浮点数计算结果比较

代码如下:



$a = 0.2+0.7;
$b = 0.9;
var_dump($a == $b);


打印出的结果是:bool(false)。也就是说在这里 0.2+0.7 的计算结果与 0.9 并不相等,这显然是有违我们的常识的。

对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333...。

我们将上面的变量用双精度格式打印出来:

复制代码 代码如下:


$a = 0.2+0.7;
$b = 0.9;
printf("%0.20f", $a);
echo '<br />';
printf("%0.20f", $b);


输出结果如下:

复制代码 代码如下:


0.89999999999999991118
0.90000000000000002220


显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd() 函数来对浮点数想加并进行精度转换(为字符串):

复制代码 代码如下:


var_dump(bcadd(0.2,0.7,1) == 0.9); // 输出:bool(true)


浮点数取整

在《PHP 取整函数 ceil 与 floor》一文中,曾有例子:

复制代码 代码如下:


<?php
echo ceil(2.1/0.7);    // 输出:4
?>


经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:

复制代码 代码如下:


<?php
printf("%0.20f", (2.1/0.7));    // 输出:3.00000000000000044409
?>


经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此使用 round() 函数处理一下即可:

复制代码 代码如下:


<?php
echo ceil( round((2.1/0.7),1) );
?>


关于在PHP中对浮点数计算取整不准确如何解决问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。

网站栏目:在PHP中对浮点数计算取整不准确如何解决-创新互联
网页网址:https://www.cdcxhl.com/article22/dejscc.html

成都网站建设公司_创新互联,为您提供品牌网站建设网站设计手机网站建设关键词优化响应式网站做网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设