保存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
让PHP再次伟大
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7
xiaopi

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

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

转字符串,然后存字符串

1年前 评论

number_format($lng,14)

1年前 评论

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

1年前 评论

我一般都是存字符串

1年前 评论

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

1年前 评论

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