You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询时如何将计算结果四舍五入保留1位小数

实现方案

核心修改点

MySQL内置的ROUND()函数默认仅保留0位小数(即取整),只需给函数传入第二个参数指定保留1位小数即可满足需求,修改后的SQL语句中ROUND部分调整为:

ROUND(6371 * acos( 
    cos( radians('.$user_lat.') ) 
    * cos( radians( lat ) ) 
    * cos( radians( lng ) - radians('.$user_lng.') ) 
    + sin( radians('.$user_lat.') ) 
    * sin( radians( lat ) )
), 1) as distance

修改后完整代码

function getDistance($user_lat, $user_lng) {

    global $db, $_BASEPATH, $_DS;
    $error = '';
    $page = 0;
    $perpage = 12;
    $html = '';
    $template = '';


    $sql = ' SELECT 
                ROUND(6371 * acos( 
                        cos( radians('.$user_lat.') ) 
                        * cos( radians( lat ) ) 
                        * cos( radians( lng ) - radians('.$user_lng.') ) 
                        + sin( radians('.$user_lat.') ) 
                        * sin( radians( lat ) )
                ), 1) as distance 
            FROM users 
            WHERE id=' . self::ActiveUser()->id;
   
    $matches = $db->objectBuilder()->rawQuery($sql);
    // print_r($matches);exit;
    if (count($matches) <= 0) {
        return 0;
    } else {
        return $matches[0]->distance;
    }
}

可选PHP侧兜底处理

如果你不想在SQL层面处理,也可以在返回结果时用PHP的round()函数做处理,代码如下:

return round((float)$matches[0]->distance, 1);

小提示:当前代码直接拼接用户传入的经纬度到SQL语句中存在SQL注入风险,建议改用参数绑定的方式执行SQL查询更安全。

内容的提问来源于stack exchange,提问作者NicholasG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:09:03