Наиболее точное представление 0.1475 в стандарте IEEE754 для Double -
1.47499999999999992228438827624E-1
(похоже, но с меньшим количеством цифр для Float)
Redshift использует (Float или Double) внутри перед (число 4 в вашем случае) и не применяет округление, а просто обрезает результат до 4 знаков после запятой.
Будут показаны точные значения X + Y/(2^N)
, которые вы может проверить. Для 4 десятичных знаков наилучшее значение равно 1/16 = 0,0625
. Поэтому вам необходимо передать параметр ROUNDEC при использовании copy
в соответствии с документом здесь
Вы также можете сделать это
$condition2 = true;
$page = 1;
while($condition2){
if($page == 3){
$condition2 = false;
}
echo $page;
$page++;
}
Объедините эхо и инкремент вместе:
echo $page++;
Вам также нужно будет изменить условие выхода:
$page > 3
Таким образом, весь код будет
[112 ] Вы можете избавиться от if
, назначив прямое значение $ condition2:
$condition2 = true;
$page = 1;
while($condition2){
echo $page++;
$condition2 = ($page > 3);
}
И вы можете еще больше сократить его, сделав цикл зависимым от $ page, например так: [1111 ]
$page = 1;
while($page <= 3){
echo $page++;
}
Но если вы хотите использовать $ page для чего-то, кроме простого отображения его в цикле, вам придется немного изменить это, поэтому вы не изменяете его, пока пытаетесь его использовать :
$page = 0;
while($page++ < 3) {
echo $page;
//use $page for something
};
Либо установите $page
в ноль, изменив:
$page = 1;
на:
$page = 0;
Или отобразите переменную перед добавлением 1 к ней:
$condition2 = true;
$page = 1;
while($condition2){
echo $page;
$page++
if($page == 3){
$condition2 = false;
}
}
Что, если вместо этого вы увеличите счетчик в конце?
$condition2 = true;
$page = 1;
while($condition2){
echo $page;
if($page == 3){
$condition2 = false;
}
$page++;
}
Вы увеличиваете переменную страницы слишком рано. Добавьте страницу ++ прямо в конце цикла