php - 过大浮点型数据比较大小
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-21 10:11:00
[PHP讨论组]
$a = 12345678912345678.8;
$b = 12345678912345678.9;

就这2个不同数字,if($a == $b){echo '相等';}结果输出‘相等’,我知道是太大超出他的范围,单独输出$a的结果是:1.2345678912346E+16十六进制的,请问像这种大的数据如何比较最好?

曾经蜡笔没有小新
曾经蜡笔没有小新

全部回复(4)
某草草

php BC高精确度函数库

if(bcsub($a,$b,1)==0){
    echo '相等';
}
扔个三星炸死你
$a = 12345678912345678.8;
$b = 12345678912345678.9;
$a = (string)$a;
$b = (string)$b;
if ($a == $b) {
    echo '相等';
}
仅有的幸福

经过自己电脑上测试当长度超过14位时, PHP就会益出。 不一样的系统 不一样的PHP版本长度益出会不一样。

相关资料 官方手册

方法1:

$a = '12345678912345678.6';
$b = '12345678912345678.9';
if($a == $b) {
    echo 1;
}

方法2:
这里只提供下思路

如果想要直接通过浮点来比较没有找到方法。

  1. 先将以.分隔

  2. 获取整数部分位数,比较长度,再比较大小。

  3. 诺整数部分相等再比较小数部分。

Tip:考虑到数的无限大,也要注意分隔之后的数长度的益出,若益出再进行分隔。

PHP中文网
<?php
    $a = 12345678912345678.8;
    $b = 12345678912345678.9;
    if (strval($a) == strval($b)) {
        echo '相等';
    }
?>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号