php bccomp的替换函数

小编 2026-06-21 阅读:1852 评论:0
if (!function_exists('bccomp')) { /** * 支...
if (!function_exists('bccomp')) {    /**     * 支持正数和负数的比较     * ++ -- +-     * @param $numOne     * @param $numTwo     * @param null $scale     * @return int|string     */    function bccomp($numOne, $numTwo, $scale = null)    {        //先判断是传过来的两个变量是否合法,不合法都返回'0'        if (!preg_match("/^([+-]?)d+(.d+)?$/", $numOne, $numOneSign) ||            !preg_match("/^([+-]?)d+(.d+)?$/", $numTwo, $numTwoSign)        ) {            return '0';        }        $sigNone = $numOneSign[1] === '-' ? '-' : '+';        $signTwo = $numTwoSign[1] === '-' ? '-' : '+';        if ($signOne !== $signTwo) {    //异号            if ($signOne === '-' && $signTwo === '+') {                return -1;            } else if ($signOne === '+' && $signTwo === '-') {                return 1;            } else {                return '0';            }        } else {  //同号            //两个负数比较            if ($signOne === "-" && $signTwo === '-') {                $numOne = abs($numOne);                $numTwo = abs($numTwo);                $flag = bccompPositiveNum($numOne, $numTwo, $scale);                if ($flag === 0) {                    return 0;                } else if ($flag === 1) {                    return -1;                } else if ($flag === -1) {                    return 1;                } else {                    return '0';                }            } else {    //两个正数比较                //两正数比较                return bccompPositiveNum($numOne, $numTwo, $scale);            }        }    }}if (!function_exists('bccompPositiveNum')) {    /**     * 比较正数的大小写问题     * @param $numOne     * @param $numTwo     * @param null $scale     * @return int|string     */    function bccompPositiveNum($numOne, $numTwo, $scale = null)    {        // check if they're valid positive numbers, extract the whole numbers and decimals        if (!preg_match("/^+?(d+)(.d+)?$/", $numOne, $tmpOne) ||            !preg_match("/^+?(d+)(.d+)?$/", $numTwo, $tmpTwo)        ) {            return '0';        }        // remove leading zeroes from whole numbers        $numOne = ltrim($tmpOne[1], '0');        $numTwo = ltrim($tmpTwo[1], '0');        // first, we can just check the lengths of the numbers, this can help save processing time        // if $numOne is longer than $numTwo, return 1.. vice versa with the next step.        if (strlen($numOne) > strlen($numTwo)) {            return 1;        } else {            if (strlen($numOne) < strlen($numTwo)) {                return -1;            } // if the two numbers are of equal length, we check digit-by-digit            else {                // remove ending zeroes from decimals and remove point                $Dec1 = isset($tmpOne[2]) ? rtrim(substr($tmpOne[2], 1), '0') : '';                $Dec2 = isset($tmpTwo[2]) ? rtrim(substr($tmpTwo[2], 1), '0') : '';                // if the user defined $scale, then make sure we use that only                if ($scale != null) {                    $Dec1 = substr($Dec1, 0, $scale);                    $Dec2 = substr($Dec2, 0, $scale);                }                // calculate the longest length of decimals                $DLen = max(strlen($Dec1), strlen($Dec2));                // append the padded decimals onto the end of the whole numbers                $numOne .= str_pad($Dec1, $DLen, '0');                $numTwo .= str_pad($Dec2, $DLen, '0');                // check digit-by-digit, if they have a difference, return 1 or -1 (greater/lower than)                for ($i = 0; $i < strlen($numOne); ++$i) {                    if ((int)$numOne{$i} > (int)$numTwo{$i}) {                        return 1;                    } elseif ((int)$numOne{$i} < (int)$numTwo{$i}) {                        return -1;                    }                }                // if the two numbers have no difference (they're the same).. return 0                return 0;            }        }    }}

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表