echo "ceil(0) = ".ceil(0);运行结果是:
ceil(0) = 0
可以看到,ceil(0)的返回值是0. 这时,你可能会想:“0不是整数吗?为什么向上取整返回值还是0呢?” 确实,从数学意义上来说,整数就是整数,不需要向上取整。 但是,我们在编程中,需要特别注意0的处理。 下面,我们就来探讨一下,为什么对于0这个参数,ceil()函数的返回值会是0,而不是1。举个例子,假如我们想要按5的倍数来对数字进行划分,假设划分的区间为:[0,5), [5,10), [10,15)...依次类推。 如果我们使用向上取整的方法,可以这么拼凑出来:echo ceil(0/5); // 0echo ceil(1/5); // 1echo ceil(2/5); // 1echo ceil(3/5); // 1echo ceil(4/5); // 1echo ceil(5/5); // 1echo ceil(6/5); // 2echo ceil(7/5); // 2echo ceil(8/5); // 2echo ceil(9/5); // 2echo ceil(10/5); // 2我们可以看到,当参数为0的时候,返回值为0;而当参数大于0时,ceil()函数会按照我们期望的向上取整的功能进行处理。 这是因为在PHP中,0被视作“非正数”,而不是“正数”。在计算ceil(0)时,PHP会将其视作负数取整,于是便得到了0这个结果。为了更加直观地证明这一点,我们可以将0.0000000001作为参数传入ceil()函数:
echo "ceil(0.0000000001) = ".ceil(0.0000000001);运行结果是:
ceil(0.0000000001) = 1
可见,当数字非常接近0时,ceil()函数会按照正数进行处理,而返回值也就是我们期望的1了。 综上所述,对于PHP中的ceil(0)函数返回值为0的问题,其实并不是一个bug,而是PHP本身的设计特性。在实际编程中,我们需要注意这个特性,以免对程序逻辑造成影响。