PHP下的浮点运算不准的解决方法

最近在做一个?的相加减问题是,出现了浮点运算不准的情况,看来都说解释型语言对于浮点运算都会有问题的说法是真的。

首先看一段代码:

<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);

打印出来的值居然为 boolean false

这是为啥?PHP手册对于浮点数有以下警告信息:

Warning

浮点数精度

显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999...。

这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3333333. . .。

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数

那么上面的算式我们应该改写为<?php$a = 0.1;$b = 0.7;var_dump(bcadd($a,$b,2) == 0.8);这样就能解决浮点数的计算问题了

以上就是小编为大家带来的PHP下的浮点运算不准的解决方法全部内容了,希望大家多多支持脚本之家~

时间: 2024-09-20 12:15:44

PHP下的浮点运算不准的解决方法的相关文章

PHP下的浮点运算不准的解决方法_php实例

最近在做一个?的相加减问题是,出现了浮点运算不准的情况,看来都说解释型语言对于浮点运算都会有问题的说法是真的. 首先看一段代码: <?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8); 打印出来的值居然为 boolean false 这是为啥?PHP手册对于浮点数有以下警告信息: Warning 浮点数精度 显然简单的十进制分数如同 0.1 或 0.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式.这就会造成混乱的结果:例如,floor

IE下img图片与容器下边界有空隙的解决方法

IE下img图片与容器下边界有空隙的解决方法

xp系统下主题不能使用的解决方法

  xp系统下主题不能使用的解决方法          可以在桌面右击属性,点开主题的下拉箭头,可以看到以前安装的主题都不见了,桌面也变成了灰白色.也就是XP的经典模式. 从网上下载一批新的主题后进行主题安装,从桌面属性里点开后也看不到最新安装的主题,就出现了一个水墨主题,但点后也是显示不完整的. 为了解决这个问题,从我的电脑上打开C:WINDOWSResourcesThemes 进入主题安装的目录 双击一个主题文件,文件提示电脑主题的服务没有启动,好像找到了问题的所在. 打开控制面板,双击打开

javascript在IE下trim函数无法使用的解决方法

 本文实例分析了javascript在IE下trim函数无法使用的解决方法,对于web前段设计有一定的借鉴价值.具体分析如下: 首先,javascript的trim函数在firefox下面使用没有问题: 1 <script language="javascript">  2  var test1 = "  aa  ";  3  test1 = test1.toString();  4  test1 = test1.trim();  5 </scri

window.location.href IE下跳转失效的解决方法

 这篇文章主要介绍了window.location.href IE下跳转失效的解决方法,需要的朋友可以参考下 代码如下: <a href="javascript:void(0)" >GoNext</a>  $("a").click(function(){  window.location.href = "xxx.html";  })    代码如上,在IE下,特别是在IE6中,点击超链接之后,浏览器并没有发生跳转行为. 

Win8系统下自动开启Bing的解决方法

  Windows8系统面市已经有一段时间了,用户安装体验win8也有一段时间,对于win8的操作,相信很多用户已经或多或少掌握了一些,但是在面对win8系统下的一些小问题还是无法自己去解决,下面我们就来分享一个win8系统下自动打开bing的解决方法,供用户参考. 问题症状: 开机自动启动默认浏览器并且打开cn.bing.com站点.问题浏览器不限于IE,即使安装了火狐.谷歌的都一样;同时,不是所有安装Win8系统的用户都会有. 解决方案: - 同时按住Win + R键,输入"gpedit.m

Win7系统下无法打开光盘的解决方法

  虽然现在大家都习惯于在网上观看一些视频,似乎光盘的使用率大大下降了,但是相比网上的视频资源,光盘视频像素更加高一些,而且网上很多都是盗版的,所以还是有部分人会一如既往的使用光盘.不知道是不是因为长时间不用光盘了,今天小编使用win7电脑打开光盘的时候无法打开了,这是怎么回事呢?小编首先排查了光驱的因素,看看是不是光驱坏了,但是并非光驱的原因,到底是什么原因呢?下面小编和大家分享Win7系统无法打开光盘的解决方法. Win7系统下无法打开光盘的解决方法教程 1.首先点击开始打开运行窗口,在运行

JQuery.validate在ie8下不支持的快速解决方法_jquery

一.在ie8下回有问题的代码 1.JQuery.validate验证框架是通过页面form表单提交验证<input/>标签中输入是否符合自己的规则的 <form id="cardTypeFrm"> <table width="100%" cellspacing="0" cellpadding="0" class="table_pzh"> <tbody> <

javascript在IE下trim函数无法使用的解决方法_javascript技巧

本文实例分析了javascript在IE下trim函数无法使用的解决方法,对于web前段设计有一定的借鉴价值.具体分析如下: 首先,javascript的trim函数在firefox下面使用没有问题: <script language="javascript"> var test1 = " aa "; test1 = test1.toString(); test1 = test1.trim(); </script> 在火狐下这样用没有问题,