首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用使用十进制数的PHP函数到Mysql

使用使用十进制数的PHP函数到Mysql
EN

Stack Overflow用户
提问于 2017-11-01 19:23:00
回答 1查看 48关注 0票数 1

我试图将这个函数从php转到mysql:

代码语言:javascript
运行
复制
    function distancia($p1LA, $p1LO, $p2LA, $p2LO) {
    $r = 6371.0;

    $p1LA = $p1LA * pi() / 180.0;
    $p1LO = $p1LO * pi() / 180.0;
    $p2LA = $p2LA * pi() / 180.0;
    $p2LO = $p2LO * pi() / 180.0;

    $dLat = $p2LA - $p1LA;
    $dLong = $p2LO - $p1LO;

    $a = sin($dLat / 2) * sin($dLat / 2) + cos($p1LA) * cos($p2LA) * sin($dLong / 2) * sin($dLong / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    return round($r * $c * 1000); 
}

在mysql上,我要做的是:

代码语言:javascript
运行
复制
DELIMITER |
 CREATE FUNCTION Distancia (la1 DECIMAL, lo1 DECIMAL, la2 DECIMAL, lo2 DECIMAL)
  RETURNS DECIMAL
   DETERMINISTIC
    BEGIN
     DECLARE r DECIMAL;

     DECLARE la1aux DECIMAL;
     DECLARE lo1aux DECIMAL;
     DECLARE la2aux DECIMAL;
     DECLARE lo2aux DECIMAL;
     DECLARE retorno DECIMAL;

     DECLARE dLat DECIMAL;
     DECLARE dLong DECIMAL;

     DECLARE a DECIMAL;
     DECLARE c DECIMAL;

     SET r = 6371.0;     

     SET la1aux = la1 * pi()/180.0;     
     SET lo1aux = lo1 * pi()/180.0;     
     SET la2aux = la2 * pi()/180.0;     
     SET lo2aux = lo2 * pi()/180.0;     

     SET dLat = la2aux - la1aux;
     SET dLong = lo2aux - lo1aux;

     SET a = sin(dLat / 2) * sin(dLat / 2) + cos(la1aux) * cos(la2aux) * sin(dLong / 2) * sin(dLong / 2);
     SET c = 2 * atan2(sqrt(a), sqrt(1 - a));

     SET retorno = round(r * c * 1000);

     RETURN retorno;
    END|

我像这样调用mysql上的函数:

代码语言:javascript
运行
复制
select Distancia(-46.61579100, -23.54247250, -46.61354560, -23.54093070)/1000;

结果应该是0.276。但我得到了0。我以前从未在mysql上使用过一个过程或函数,所以我不知道我可能错过了什么。我试图使十进制变量小数点(11,8),但它也没有工作。有人需要帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 19:51:40

当您使用浮点数进行计算时,计算不是简单的(加法、乘法),当小计超出数据类型的界限时(特别是当您使用小数点而没有标度和精度时),最好使用浮点数类型。你可以在最后选择你想要的结果是多少小数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47062210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档