首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql存储纬度和经度(截取数字)的问题

问mysql存储纬度和经度(截取数字)的问题
EN

Stack Overflow用户
提问于 2021-03-31 13:15:52
回答 2查看 76关注 0票数 1

这适用于mysql (5.7.32)、php (8.0.0)和laravel 8。我使用leaflet获得lat和lng。实际上,我测试了将号码手动保存在数据库中,结果出现了相同的错误

当我使用phpmyadmin查看数据库时,我看到的正是它应该是的数字:-32.84240531063937,但是当我使用laravel和dd() -32.842405310639获取这些值时,删除最后一个数字(37)。

mysql上的数据类型是不带长度/值的双精度

这就是我从数据库中获取数字的方法。

我有一个名为投诉的表,其中每个表都有lat和lng,所以现在我需要获得所有具有(comune_name = Llay )的记录,从那里我从第一个记录中获得lat和lng。

代码语言:javascript
复制
$complaints = Complaint::where('comune_name', 'Llay Llay')->get()->toArray();

$denounced_lat = $complaints[0]['lat']; //lat of first complaint
$denounced_lng = $complaints[0]['lng']; //lng of first complaint

  dd($denounced_lat); //acá está el error

我在数据库中看到的数字是:-32.84240531063937,dd ()提取的数字是:-32.842405310639

thnks :)

编辑:最后我保存为VARCHAR。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-31 13:53:30

要在逗号‘’后面加上一个长数字,可以使用decimal

代码语言:javascript
复制
    $table->decimal('lng', 10, 18);
    $table->decimal('lat', 10, 18);

十进制列的声明语法为DECIMAL(M,D)。参数的取值范围如下:

M是最大位数(精度)。它的范围是1到65。

D是小数点(小数位数)右侧的位数。它的范围是0到30,并且不能大于M。

值得一提的是,你应该在你的模型中将它转换为$cast属性中的浮点数,在Laravel文档中,有一个十进制转换,但它还没有准备好!有关更多信息,请参阅this answer。

请参阅mysql decimal

票数 0
EN

Stack Overflow用户

发布于 2021-03-31 13:19:12

与数据库解决方案相比,PHP的工作精度有所不同。

如果您想保持精度,可以考虑将它们存储为64位有符号整数。

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

https://stackoverflow.com/questions/66882033

复制
相关文章

相似问题

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