Я работаю над экспериментом, который работает с базой данных, и я получил этот странный результат.
Система работает так:
У меня есть кнопка, которая добавляет 1 к счетчику каждый раз, когда вы нажимаете на нее.
Как только он достигнет определенного числа, он рассчитает вычет балла и обновит счет
PHP:
$counter = $_POST['counter'];
$user = $_POST['user'];
$sql = "SELECT score FROM board WHERE player = '$user'";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
if($counter == 1)
$divisor = 0;
else if($counter == 5)
$divisor = 0.1;
else if($counter == 20)
$divisor = 0.3;
else if($counter == 50)
$divisor = 1;}
$deduction = $row['score'] * $divisor;
$sql = "UPDATE board SET score = score - ".$deduction." WHERE player = '$user'";
Я начал с 10 баллов
и это результаты
Score: 10
Counter: 1
Divisor = 0; Deduction = 10 * 0;
UPDATE ... score = score - Deduction (0)
New score = 10
-------------------------------------
Score: 10
Counter: 5
Divisor = 0.1; Deduction = 10 * 0.1;
UPDATE ... score = score - Deduction (1)
New score = 9
-------------------------------------
Score: 9
Counter: 20
Divisor = 0.3; Deduction = 9 * 0.3;
UPDATE ... score = score - Deduction (2.7)
New score = 6.3
-------------------------------------
## Here is the curious part
Score: 6.3
Counter: 50
Divisor = 1; Deduction = 6.3 * 1;
UPDATE ... score = score - Deduction (6.3)
New score = 0.000000190735
Любая идея о том, почему я получаю +0,000000190735?
Я немного растерялся прямо сейчас.
B’rgrds,
Это немного долго для комментария.
Это, несомненно, вызвано различными представлениями о score
а также $divisor
или путем преобразования $divisor
в строку для запроса. Трудно указать, где именно проблема, потому что есть несколько разных мест.
Если вам действительно нужно справиться с этим, сделайте вычисления в базе данных:
UPDATE board
SET score = score * (1 - ?)
WHERE player = ?;
Передавайте заполнители в качестве параметров, а не отправляйте строку запроса.
Других решений пока нет …