浮点数并不精确
10进制:3.1,是3 * 10^0 + 1 * 10^-1;
3进制:1.1,是 3 * 3^0 + 1 * 3^-1;对应与10进制的1.33333333333333……..3333…
某些小数在10进制下,是有限的,转成2进制要无限循环,因此损失一些精度,导致浮点数计算与数学上的结果不一致。
if ( (0.3 - 0.2) == 0.1) {
echo '相等';
} else {
echo '不等';
}
逻辑运算的短路特性与运算的优先级
$house = false;
$car = true;
if ($house && $car) { //房子已经为假,又用并且计算,结果为假,程序并不会判断$car的值
echo '嫁', '<br />';
} else {
echo '不嫁', '<br />';
}
$b = 1;
if ($house && ($b = 6)) { //$b = 6被短路,没机会执行
}
echo $b, '<br />';//1
if ($house || ($b = 6)) { //$b = 6被短路,没机会执行
}
echo $b, '<br />';//6
$b = 1;
if ($car || ($b = 6)) { //$b = 6被短路,没机会执行
}
echo $b, '<br />'; //1
//利用短路写出简短代码
if(!defined('PI')){
define('PI', 3.14);
} //defined('PI') || define('PI', 3.14);
$a = 3;
$b = 5;
if ($a =5 || $b = 7) { // '||' 的优先级大于 '='
$a ++; // $a为布尔值,递增或递减布尔值没有效果
$b ++; //返回$b的值,再加1,因为返回没有任何执行,比如赋值
}
echo $a,$b;//1,6,此处$b已经加1了