PHP如何判断变量的小数点后是否存在数字、是否为整数?
PHP判断数值是否存在小数位的实现方案
核心判断逻辑
判断数值是否为不带小数位的整数,最稳妥的方式是将原数值和取整后的数值做差值对比,避免浮点数精度误差和变量类型带来的判断偏差:
- 基础判断(适用于精度要求不高的场景)
直接对比原数值和向下取整的结果是否相等即可:function hasDecimal($num) { return $num != floor($num); } // 返回true说明存在小数位,返回false说明是整数 - 高精度兼容判断(避免
0.1+0.2这类浮点数计算精度误差)
引入极小的精度阈值做误差容忍:function hasDecimal($num, $epsilon = 1e-9) { return abs($num - floor($num)) > $epsilon; }
注意:不要直接使用
is_int()做判断,该函数校验的是变量的类型为int,类似4.0这类float类型的整数值会返回false,不符合业务需求。
适配你的业务场景的修正后代码
你提供的原始代码存在两处遗漏:$dezimal/2没有将计算结果赋值回变量、floor($dezimal)也没有赋值,修正后的完整可运行代码如下:
// 示例初始值 $dezimal = 12.5; // 精度阈值 $epsilon = 1e-9; while(abs($dezimal) > $epsilon) { $dezimal = $dezimal / 2; // 整数判断逻辑 if(abs($dezimal - floor($dezimal)) < $epsilon) { // 整数情况的业务逻辑写在这里 echo "当前计算结果:{$dezimal},为整数\n"; } else { // 带小数情况的业务逻辑写在这里 echo "当前计算结果:{$dezimal},存在小数位\n"; } $dezimal = floor($dezimal); }
其他可选实现方案
如果输入的数值均为无科学计数法的常规格式,也可以通过字符串匹配判断:
function hasDecimal($num) { $numStr = rtrim((string)$num, '0'); return strpos($numStr, '.') !== false; }
内容的提问来源于stack exchange,提问作者Timothy Kardel
相关产品推荐
相关产品推荐

