为什么这些表达总是返回7?

时间:2016-10-08 19:26:07

标签: php

我真的很想知道,为什么以下代码总是返回7.我真的很困惑。

private int search(int[] seq, int key, int low, int high){
    int mid = low + (high - low) / 2;
    out :  //label
    if (key == mid) {
        return mid;
    }
    if (key <  mid) {
        high = mid;
        if (key != mid) {
            break out;
        }
    }
    return 1;
}

输出测试:

$a = (double) ((0.1 + 0.6) * 10); //Output: 7
$b = (int)    ((0.1 + 0.6) * 10); //Output: 7
$c = (int)    ((0.1 + 0.7) * 10); //Output: 7

1 个答案:

答案 0 :(得分:4)

$a = (double) ((0.1 + 0.6) * 10); //Output: 7
$b = (int)    ((0.1 + 0.6) * 10); //Output: 7
$c = (int)    ((0.1 + 0.7) * 10); //Output: 7

理论上(0.1 + 0.7) * 10部分应该评估为8而不是7。

脚本中第三表达式的输出计算结果为7,因为PHP引擎在内部将表达式的值存储为7.999999而不是7.

当小数值转换为整数时,PHP引擎只会截断小数部分。