这适用于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。
$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。
发布于 2021-03-31 13:53:30
要在逗号‘’后面加上一个长数字,可以使用decimal
$table->decimal('lng', 10, 18);
$table->decimal('lat', 10, 18);十进制列的声明语法为DECIMAL(M,D)。参数的取值范围如下:
M是最大位数(精度)。它的范围是1到65。
D是小数点(小数位数)右侧的位数。它的范围是0到30,并且不能大于M。
值得一提的是,你应该在你的模型中将它转换为$cast属性中的浮点数,在Laravel文档中,有一个十进制转换,但它还没有准备好!有关更多信息,请参阅this answer。
发布于 2021-03-31 13:19:12
与数据库解决方案相比,PHP的工作精度有所不同。
如果您想保持精度,可以考虑将它们存储为64位有符号整数。
https://stackoverflow.com/questions/66882033
复制相似问题