7

文档指出,$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
)
4

1 回答 1

3

范围包括在内;但是,您对加起来的数字的假设是不正确的。

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
于 2017-01-19T23:35:13.247 回答