保存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
浮点型精度的问题吧。第一步用字符串试试
转字符串,然后存字符串
number_format($lng,14)
这个原因是因为PHP中浮点型数据精度的问题,因为你的$lng和$lat在使用时就已经失去精度了,所以你这两个变量要么就存储成字符串类型的,要嘛就用number_format()函数去格式化,而不是用(string)去转换变量类型
我一般都是存字符串
经纬度? 精确到6位就可以的吧