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
相关产品推荐
相关产品推荐

