最近一个朋友碰到个问题,比较神奇
1 2 3 4 5 6 7 | var_dump(is_float(1.1+0.1)); var_dump(is_float(1.2)); if(1.2 <(1.1+0.1)){ echo "true"; }else{ echo "false"; } |
结果是 true
网上查了一下,原因如下
如果用php的+-*/计算浮点数时,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个bug,是跨语言的
那么运算浮点数用一些php特有的运算函数
例如 bcadd() 把两个浮点数相加
1 2 3 4 5 | if(1.2 <bcadd(1.1,0.1,10)){ echo "true"; }else{ echo "false"; } |
发表评论
要发表评论,您必须先登录。