当前位置:首页 > PHP > 正文内容

php解决浮点数精度问题

高老师8年前 (2017-12-24)PHP2460

首先看看以下代码:

代码1:

<?php
$a=0.1;
$b=0.7;

if($a+$b==0.8)
{
	echo "1";
}
else{
	echo "2";
}
?>

代码2:

<?php
    $f = 0.58;
    var_dump(intval($f * 100)); //为啥输出57
?>

以上问题引用鸟哥的话就是"你看似有穷的小数, 在计算机的二进制表示里却是无穷的".

但是这都不要紧,因为php还提供了高精度函数库。

解决代码1:

<?php
$a=0.1;
$b=0.7;

if(bcadd($a,$b,1)==0.8)
{
	echo "1";
}
else{
	echo "2";
}
?>

解决代码2:

<?php
    $f = 0.58;
    var_dump(bcadd($f * 100,0,0));
?>

其实在其他语言中也是存在的,例如以下c#

        static void Main(string[] args)
        {
            double a = 0.1;
            double b = 0.7;
            if (a+b==0.8)
            {
                Console.WriteLine("ok");
            }
            else
            {
                Console.WriteLine("failed!");
            }
            Console.ReadKey();
        }

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/52.html

分享给朋友:

“php解决浮点数精度问题” 的相关文章

PHP对象转数组

PHP对象转数组

function objtoarr($obj){ $ret = array(); foreach($obj as $key =>$value){ if(gettype($value) == 'arr...

php 数组转换xml,php 数组转成xml,php数组转xml 函数

php 数组转换xml,php 数组转成xml,php数组转xml 函数

源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...

PHP二维数组排序,PHP多维数组排序, array_multisort()

PHP二维数组排序,PHP多维数组排序, array_multisort()

使用php函数array_multisort()即可实现和SQL一样的order by排序. 例如我们需要对会员表按照主键降序排列,年龄升序排列://会员表数据 $list = []; $list[] = ['mid' =>&n...

PHP中的ArrayAccess用法详解

PHP中的ArrayAccess用法详解

php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class  studen...

php多进程实现任务管理器,定时执行任务,支持守护

php多进程实现任务管理器,定时执行任务,支持守护

主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /**  * 订单任务  */ class Order {    &n...

PHP getenv函数和putenv函数的学习

PHP getenv函数和putenv函数的学习

(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...