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

php解决浮点数精度问题

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

首先看看以下代码:

代码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将html转为pdf,php将html页面导出pdf

php将html转为pdf,php将html页面导出pdf

首先下载wkhtmltox-0.12.4_linux-generic-amd64.tar.xz   (不要下载RPM包,依赖太多,需要x-server支持),并解压,执行测试运行正常tar wkhtmltox-0.12.4_linux-generic-amd64.tar.xzcd...

php 地址转换经纬度

php 地址转换经纬度

//$ak开发密钥,$cityname城市名称(支持省县乡详细地址) public  function   getposition($ak,$cityname){ $callback=array('lng'=>0,'l...

抛弃salt,使用password_hash()加密

抛弃salt,使用password_hash()加密

md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...

 php监听事件,php触发事件

php监听事件,php触发事件

逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event {     /** &nbs...

PHP中的ArrayAccess用法详解

PHP中的ArrayAccess用法详解

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

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

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

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