保存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 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 7
xiaopi

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

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

转字符串,然后存字符串

2年前 评论

number_format($lng,14)

2年前 评论

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

2年前 评论

我一般都是存字符串

2年前 评论

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

2年前 评论

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