PHP手册笔记之数据类型

转换为布尔值 要明确地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

 

类型戏法  和 强制转化

当转换为 boolean 时,以下值被认为是 FALSE

  • the 布尔FALSE 自身
  • the 整型值 0 (零)
  • the 浮点型值 0.0 (零)
  • 字符串, 以及 字符串 "0"
  • 不包括任何元素的数组
  • 不包括任何成员变量的对象(仅PHP 4.0 适用)
  • 特殊类型 NULL (包括尚未设定的变量)
  • 从没有任何标记(tags)的XML文档生成的SimpleXML 对象

Warning -1 和其它非零值(不论正负)一样,被认为是 TRUE!

以上是boolean


整型

decimal     : [1-9][0-9]*                十进制
            | 0

hexadecimal : 0[xX][0-9a-fA-F]+   十六进制

octal       : 0[0-7]+                        八进制

integer     : [+-]?decimal
            | [+-]?hexadecimal
            | [+-]?octal

Warning 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。

<?php
var_dump(01090); // 八进制 010 = 十进制 8
?> 

 




整数溢出 如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

Warning

关于浮点数精度的警告

显然简单的十进制分数如同 0.10.7 不能在不丢失一点点精度的情况下转换为内部二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9

这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3 变成了 0.3

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。 

posted @ 2013-02-20 12:17  风林火山09  阅读(76)  评论(0)    收藏  举报