1 Востаннє редагувалося Betterthanyou (24.06.2015 22:16:26)

Тема: Неправильно працює цикл [ Вирішено ]

Що не так в коді

//$_GET["P"] = 3997, $_GET["P"] = 3996
$page=($_GET["P"]+10)/10;
$rounding_page=ceil($page);
$line = ($rounding_page-$page)*10;
/*
$_GET["P"] - номер теми (10 тем на сторінці тому ділиться на 10)
$page - номер сторінки
$rounding_page - округлений до більшого номер сторінки
$line - теми які потрібно пропустити
*/
...
for($i=0,$pos=0;$i<$line;$i++)
    echo "<br>",$i,") ",$i," < ",$line," ",$pos=strpos($demo,"<h2><a href=\"",$pos)+30;

результат при $line = 3 ($_GET["P"]=3997)
0) 0 < 3 8505
1) 1 < 3 9904
2) 2 < 3 11504
3) 3 < 3 12864 - цей результат не правильний бо 3 не більше 3
результат при $line = 4 ($_GET["P"]=3996)
0) 0 < 4 8505
1) 1 < 4 9904
2) 2 < 4 11504
3) 3 < 4 12864 - тут все правильно

коли я виконав явне перетворення типів, $line = (int)$line, то результати виходили не правильні, кудись пропала одиниця

$page=($_GET["P"]+10)/10;
$rounding_page=ceil($page);
$line = ($rounding_page-$page)*10;
$line = (int)$line;
/*
$_GET["P"] - номер теми (10 тем на сторінці тому ділиться на 10)
$page - номер сторінки
$rounding_page - округлений до більшого номер сторінки
$line - теми які потрібно пропустити
*/
...
for($i=0,$pos=0;$i<$line;$i++)
    echo "<br>",$i,") ",$i," < ",$line," ",$pos=strpos($demo,"<h2><a href=\"",$pos)+30;

$line до перетворення = 4,а після = 3
Що ж не так ?

2

Re: Неправильно працює цикл [ Вирішено ]

Почитай про те чому у програмуванні дробові числа мають точність і чому 3 не завжди дорівнює 3.0
http://php.net/manual/en/language.types.float.php

Подякували: koala, Betterthanyou, DictatoR, Vo_Vik4

3

Re: Неправильно працює цикл [ Вирішено ]

Щодо останнього лінка, то є українська версія вказаної документації, можливо це спростить розуміння прочитаного.

Стосовно посторінкового поділу, то колись давно я створив свій перший pagination (зараз використовую фреймворки, тому відпала потреба в його оновленні).

Подякували: Betterthanyou1

4

Re: Неправильно працює цикл [ Вирішено ]

Дякую я вже вирішив цю проблему функцією округлення round()

5

Re: Неправильно працює цикл [ Вирішено ]

Додайте [ Вирішено ] до назви теми.