PHP报错:number_format()期望参数1为float,传入string求解决
问题排查与解决
- 报错根源:
number_format()要求第一个参数必须是float/int类型,但你传入的$value是字符串,导致类型不匹配触发错误。而且money_format()同样需要数值类型参数,所以不管代码走哪个分支,都得先保证$value是有效数值。
修复后的代码
public static function format_inr($value, $decimals = 0) { setlocale(LC_MONETARY, 'en_IN'); // 先把输入转为有效数值,非数字内容默认设为0 $numericValue = is_numeric($value) ? (float)$value : 0.0; if (function_exists('money_format')) { return money_format('%!i.' . $decimals . 'i', round($numericValue)); } else { return number_format($numericValue, $decimals); } }
关键修改点
- 新增
$numericValue变量,先通过is_numeric()判断输入是否为有效数字,是则转为float类型,否则设为0.0,彻底避免类型错误。 - 原代码中
number_format的第二个参数写死为2,改成使用传入的$decimals参数,保持两个分支的格式化逻辑一致。
内容的提问来源于stack exchange,提问作者rahul bonde
相关产品推荐
相关产品推荐

