保存14位小数的经纬度,转换成sql总是截取后几位!

前端提交参数

$lng = 117.46493429145853;
$lat = 36.787402918956744;

保存数据

Station::where('id', $id)->fetchSql()->update([
    'lng' => (string) $lng, //这里别管是不是转成string,最终打印的sql的值都会保存为10位小数
    'lat' => (string) $lat
]);

转成的sql

字段类型decimal(17,14),这里用的是TP5,请问这里保留10位是哪一步的问题?

UPDATE `gas_station` SET `lng` = 117.46493429146 , `lat` = 36.787402918957 WHERE `id` = 3206
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7
xiaopi

浮点型精度的问题吧。第一步用字符串试试

2年前 评论
勇敢的心 (楼主) 2年前

转字符串,然后存字符串

2年前 评论

number_format($lng,14)

2年前 评论

这个原因是因为PHP中浮点型数据精度的问题,因为你的$lng和$lat在使用时就已经失去精度了,所以你这两个变量要么就存储成字符串类型的,要嘛就用number_format()函数去格式化,而不是用(string)去转换变量类型

2年前 评论

我一般都是存字符串

2年前 评论

经纬度? 精确到6位就可以的吧

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!