大家好,我正在为我的应用程序编写代码并遇到一个错误。
bug如下:
执行该请求时,显示空响应
SELECT * FROM jobs WHERE lat = 47.02489170 AND lng = 28.83106860;
# или
SELECT * FROM jobs WHERE lng = 28.83106860;
但是当执行请求而不指定 lng 时:
SELECT * FROM jobs WHERE lat = 47.02489170;
这会产生以下响应:
+------+-----------------------+-------------+-------------+-------------+
| id | title | description | lat | lng |
+------+-----------------------+-------------+-------------+-------------+
| 1510 | Administrator magazin | NULL | 47.02489170 | 28.83106860 |
+------+-----------------------+-------------+-------------+-------------+
这是 mysql 中的某种错误还是 double 不那么准确?
如果有任何答案或文章链接,我将不胜感激。
职位空缺表
CREATE TABLE `jobs` (
`id` bigint NOT NULL AUTO_INCREMENT,
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,
...
`lat` double(10,8) DEFAULT NULL,
`lng` double(10,8) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3230 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC
使用“空间扩展”扩展。
浮点数有时会引起混乱,因为它们是近似值并且不存储为精确值。 SQL语句中写入的浮点值可能与内部表示的值不同。比较时尝试将浮点值视为精确值可能会导致问题。它们还依赖于平台或实现。数据类型
FLOAT和DOUBLE.对于列,DECIMALMySQL 的运算精度为 65 位十进制数字,这应该可以解决最常见的不准确问题。https://dev.mysql.com/doc/refman/8.4/en/floating-point-types.html