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

php解决浮点数精度问题

高老师9年前 (2017-12-24)PHP2502

首先看看以下代码:

代码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使用post发送Json数据

PHP使用post发送Json数据

前公司吃饭是需要在钉钉报餐的,对于不挑剔的我每天都在公司吃饭,有时忘记报餐导致吃不了饭还是很麻烦的。看了下报餐系统需要的是json数据包含我的工号即可。于是编写如下代码,放在360网址监控,1小时执行1次<?php /*自动报餐类*/ class  AutoBaocan{...

php调用 java webservice接口

php调用 java webservice接口

php调用Webservice基本语法如下:$url ='xxxxxxx.cn'  //链接服务器端 $client = new SoapClient($url);通过以上语法已经连接到webservice,也可将wsdl在本地使用,...

 php mysql 行锁,php mysql 行级锁,php mysql 行锁定

php mysql 行锁,php mysql 行级锁,php mysql 行锁定

应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...

抛弃salt,使用password_hash()加密

抛弃salt,使用password_hash()加密

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

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

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

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

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...