You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:06:03