在Laravel中如何判断给定数值是decimal还是integer类型
PHP decimal/integer类型判断实现方案
核心逻辑说明
因为要求带小数点的格式(包括10.00、99.0这类后缀全0的格式)都判定为decimal,所以不能直接用数值对比判断,优先基于原始参数的字符串格式做校验,避免自动类型转换导致格式丢失。
可直接使用的代码实现
替换你现有的代码片段即可:
$value = $request->amount; // 自定义类型标识,可根据需求修改 const TYPE_DECIMAL = 'decimal'; const TYPE_INTEGER = 'integer'; // 转原始字符串保留格式 $rawValueStr = (string)$value; $returnType = ''; // PHP8以下版本把str_contains替换为 strpos($rawValueStr, '.') !== false if (str_contains($rawValueStr, '.')) { $returnType = TYPE_DECIMAL; // 此处编写decimal对应的业务逻辑 } else { // 校验是否为合法整数 if (preg_match('/^[+-]?\d+$/', $rawValueStr)) { $returnType = TYPE_INTEGER; // 此处编写integer对应的业务逻辑 } else { // 非合法数值的异常处理,可根据需求调整 throw new \InvalidArgumentException('amount参数不是合法数值格式'); } } // 返回类型标识 return $returnType;
注意事项
- 完全覆盖要求的特殊场景:
10.00、10.0、99.000这类带小数点的格式都会被判定为decimal,纯整数格式会被判定为integer
特别提醒:如果上游参数已经被自动转为float类型(比如字符串
10.00被自动转成了float(10.0)),转字符串后会丢失小数点变为10,这种场景无法区分原始是整数还是带.0的decimal,需要要求上游传递原始字符串格式的金额,或者接收参数时关闭自动类型转换。
内容的提问来源于stack exchange,提问作者user17426459
相关产品推荐
相关产品推荐

