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

如何在PHP中将years.months格式字符串转换为总月数?

问题描述

客户提供的非标准格式数据,原本预期年、月分为两列,实际却是以点分隔的字符串格式:[years].[months]。该数据已导入MySQL数据库,需在PHP中将years.months格式转换为总月数,测试用例:

  • 1.2(1年2个月)转换为14
  • 1.0(1年0个月)转换为12

原代码存在问题,需要修正:

$yearwithdecimal = "1.2";
$yearwithdecimal = (float)$yearwithdecimal;
if (is_float($yearwithdecimal)) {
    $yearsArray = explode(".",$yearwithdecimal);
    $year_months = $yearsArray[0]*12;
    $more_months = $yearsArray[1];
    $total_months = $year_months + $more_months;
}else{
    $total_months = $yearwithdecimal*12;
}
echo $total_months; die;
// Output is 14
原代码的问题
  1. 浮点转换丢失格式/精度:比如输入"1.0"转成float后变为1,explode拆分仅得到["1"],访问$yearsArray[1]会触发未定义索引错误;输入"2.10"转成float后会变成2.1,拆分后得到["2", "1"],实际应加10个月,结果错误。
  2. 类型判断逻辑无效:整数形式的字符串(如"3")转成float后会变成3.0,进入if分支,但拆分同样会出现索引缺失问题。
修正后的代码

直接对原始字符串处理,规避类型转换带来的问题:

$yearWithDecimal = "1.0"; // 可替换为任意目标字符串

// 按点分割原始字符串
$parts = explode(".", $yearWithDecimal);
// 提取年份:取第一个元素转整数,空输入默认0
$years = isset($parts[0]) ? (int)$parts[0] : 0;
// 提取月份:有第二个元素则转整数,无则默认0
$months = isset($parts[1]) ? (int)$parts[1] : 0;

$totalMonths = $years * 12 + $months;
echo $totalMonths; // 输出12
测试验证
  • 输入"1.2" → 输出14
  • 输入"1.0" → 输出12
  • 输入"2.10" → 输出34(2*12+10=34)
  • 输入"5" → 输出60(5*12+0=60)
  • 输入"0.7" → 输出7

内容的提问来源于stack exchange,提问作者Amit Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:12:24