PHP幂运算符(^)返回错误结果的原因是什么?哪种计算正确?
谷歌Sheets与PHP中FLOOR计算结果差异的原因及正确性分析
差异原因
- PHP里的
^是位异或运算符,并非幂运算。你的代码(179 / 100)^2实际执行流程是:先计算179/100得到1.79,位运算会自动将浮点数转为整数1,再和2做异或运算(二进制01与10异或得到11,对应十进制3)。最终计算式变为84.614285714286 / 3 ≈28.2047,经floor()处理后得到28。 - 谷歌Sheets中的
^是幂运算符,(179/100)^2即计算1.79的平方,结果为3.2041。代入后84.614285714286 / 3.2041 ≈26.408,经FLOOR()处理后得到26。
结果正确性
从BMI(体重指数)的标准计算逻辑(体重(kg) ÷ 身高(m)的平方)来看,谷歌Sheets的计算逻辑是正确的,结果26符合真实的BMI数值。
PHP代码因误用运算符导致结果错误,修正方法是使用pow()函数实现幂运算:
floor($currentWeight / pow($user['height'] / 100, 2))
修改后即可得到与谷歌Sheets一致的正确结果26。
内容的提问来源于stack exchange,提问作者Jobbo
相关产品推荐
相关产品推荐

