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

php解决浮点数精度问题

高老师7年前 (2017-12-24)PHP2184

首先看看以下代码:

代码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 base64保存为图片偷懒版本

php base64保存为图片偷懒版本

<?php $base64_body = substr(strstr($_POST[base64],','),1); $data= base64_decode($base64_body); file_put_contents($_SERVER[&q...

php引用变量的完全理解

php引用变量的完全理解

在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...

 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多进程学习-进程信号管理

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

php定义常量数组

php定义常量数组

<?php //php7+ define('CONFIG', [     'MYSQL' => '127.0.0.1',     ...