Почему range () не включается, когда задается с плавающим диапазоном и интервалом?

документация утверждает, что $end из диапазона включительно. И это в большинстве случаев, но когда оба $end а также $step являются поплавками, последнее значение отсутствует. Это почему?

print_r(range(1, 13, 1));
print_r(range(1, 13, 0.1));
print_r(range(0.1, 1.3, 0.1));

Выход:

Array
(
[0] => 1
[1] => 2
// ...
[11] => 12
[12] => 13
)
Array
(
[0] => 0.1
[1] => 0.2
// ...
[119] => 12.9
[120] => 13
)
Array
(
[0] => 0.1
[1] => 0.2
// ...
[10] => 1.1
[11] => 1.2
// 12 => 1.3 is missing
)

7

Решение

Диапазон включительно; однако ваши предположения о суммировании чисел неверны.

0.1 не может быть представлен в двоичном формате с точной точностью. Когда вы используете его в вычислениях в php, вы получите немного большее или меньшее число. Взгляните на следующую кодовую панель:

http://codepad.org/MkoWgAA1

<?php

$sum = 1.0 + 0.1 + 0.1;

if ($sum > 1.2) {
print("1.2 > 1.2");
} else if ($sum < 1.2) {
print("1.2 < 1.2");
} else {
print("1.2 == 1.2");
}

Выход:

1.2 > 1.2
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]