#php #mysqli #floating-point
#php #mysqli #значение с плавающей запятой
Вопрос:
Я работаю с широтой и долготой, чтобы получить точки, которые ближе к другим точкам. Мне нужно найти широты, которые могут существовать между двумя числами в моей базе данных, к сожалению, я не могу найти — в качестве примера — 10.0015315, который находится между 10.0015316 и 10.0015314. Я использовал WHERE и BETWEEN, которые всегда работают с целыми числами, но я не могу получить результаты, используя их с этими числами с плавающей запятой. В чем может быть причина или как я могу это сделать?
$latCord = 10.0015315; //I want to find this FLOAT, or a group of FLOATS in a column point_lat BETWEEN 2 numbers.
$radio = 0.0000001; //This changes dynamically
$radioLatUp = $latCord $radio; // 10.0015316
$radioLatDown = $latCord - $radio; // 10.0015314
//$sql = 'SELECT * FROM pointnet WHERE `point_lat` BETWEEN ? AND ?';
$sql = 'SELECT * FROM pointnet WHERE `point_lat` >= ? AND `point_lat` <= ?';
$pre_stmt = $this->con->prepare($sql);
$pre_stmt->bind_param('ss',$radioLatDown,$radioLatUp);
$pre_stmt->execute() or die($this->con->error);
$result = $pre_stmt->get_result();
if ($result->num_rows > 0) {
while($row = mysqli_fetch_assoc($result)) {
$point['lat'] = $row['point_lat'];
$point['long'] = $row['point_long'];
$point['name'] = $row['point_name'];
$points[] = $point;
}
sendResponse(true,$points);
}else{
sendResponse(false,'No points close to you');
}
Комментарии:
1. Почему вы не используете
d
в качестве своего типа данных inbind_param
вместоs
? возможно, из-за этого вы теряете точность … также, каков тип данныхpoint_lat
?2. О боже… Спасибо, чувак, там была опечатка, потому что я использую двойные значения, а не строки, отклоняясь от курса. Приветствую.
3. Решило ли это проблему?
4. В общем, это была проблема, но я не знаю, как принять ваш комментарий за правильный ответ, но это решило проблему. Большое вам спасибо.
5. Вероятно, лучше всего просто удалить вопрос, поскольку проблема заключается всего лишь в опечатке, ответ вряд ли поможет кому-либо еще.