小数位数优化完成总结.md 4.8 KB

农场用户信息汇总页面小数位数优化完成总结

问题描述

在农场用户信息汇总页面中,"本阶段结束时间(剩余)"显示的相对时间存在小数位数过多的问题,例如显示 3.9725034797222小时后,影响用户体验和可读性。

解决方案

1. 优化策略

针对不同的时间单位采用不同的精度控制策略:

  • 秒级时间: 四舍五入到整数,避免小数显示
  • 分钟级时间: 四舍五入到整数,简化显示
  • 小时级时间: 保留1位小数,但整数时不显示小数点
  • 天级时间: 四舍五入到整数,便于理解

2. 技术实现

修改 FarmUserSummaryController.php 中的 formatRelativeTime() 方法:

// 根据时间差返回合适的描述
if ($diffInSeconds < 60) {
    $seconds = round($diffInSeconds);
    return "<span class='text-warning'>{$seconds}秒后</span>";
} elseif ($diffInMinutes < 60) {
    $minutes = round($diffInMinutes);
    return "<span class='text-info'>{$minutes}分钟后</span>";
} elseif ($diffInHours < 24) {
    // 小时显示保留1位小数,但如果是整数则不显示小数
    $hours = round($diffInHours, 1);
    $hoursDisplay = $hours == intval($hours) ? intval($hours) : $hours;
    return "<span class='text-primary'>{$hoursDisplay}小时后</span>";
} elseif ($diffInDays < 7) {
    $days = round($diffInDays);
    return "<span class='text-secondary'>{$days}天后</span>";
}

3. 优化效果

原始计算值 优化前显示 优化后显示 改进说明
30.7秒 30.7秒后 31秒后 四舍五入到整数,更简洁
5.3分钟 5.3分钟后 5分钟后 去除不必要的小数
2.0小时 2.0小时后 2小时后 整数不显示小数点
2.5小时 2.5小时后 2.5小时后 保留有意义的小数
3.97小时 3.9725034797222小时后 4小时后 大幅简化显示
4.1小时 4.1小时后 4.1小时后 保持合理精度
3.2天 3.2天后 3天后 简化天数显示

用户体验提升

优化前的问题

  • 显示过多无意义的小数位
  • 数字冗长,影响阅读体验
  • 精度过高,实际意义不大

优化后的效果

  • ✅ 数字简洁易读
  • ✅ 保留有意义的精度
  • ✅ 整数时不显示多余的小数点
  • ✅ 不同时间单位使用合适的精度

技术细节

智能小数处理逻辑

// 小时级:智能小数处理
$hours = round($diffInHours, 1);
$hoursDisplay = $hours == intval($hours) ? intval($hours) : $hours;

这个逻辑确保:

  1. 首先将小时数四舍五入到1位小数
  2. 如果结果是整数(如 2.0),则显示为整数(2)
  3. 如果结果有小数(如 2.5),则保留小数(2.5)

边界情况处理

  • 59.9秒60秒后 → 自动进位到分钟级
  • 60.1秒1分钟后 → 自动切换时间单位
  • 23.9小时23.9小时后 → 保留小数
  • 24.1小时1天后 → 自动切换到天级

测试验证

单元测试更新

更新了 FarmUserSummaryRelativeTimeTest.php,新增了小数位数优化的测试用例:

public function testFormatRelativeTimeHoursDecimalOptimization()
{
    // 测试3.5小时
    $futureTime = Carbon::now()->addMinutes(210);
    $result = $method->invoke($controller, $futureTime);
    $this->assertStringContainsString('3.5小时后', $result);
    
    // 测试整数小时不显示小数
    $futureTime = Carbon::now()->addHours(5);
    $result = $method->invoke($controller, $futureTime);
    $this->assertStringContainsString('5小时后', $result);
}

实际测试结果

通过测试脚本验证,优化后的显示效果符合预期:

30.7秒         -> 31秒后
5.3分钟       -> 5分钟后
2.0小时(整数) -> 2小时后
2.5小时       -> 2.5小时后
3.97小时      -> 4小时后
4.1小时       -> 4.1小时后
23.8小时      -> 23.8小时后
3.2天          -> 3天后

相关文件

修改的文件

  • app/Module/Game/AdminControllers/FarmUserSummaryController.php
  • tests/Unit/FarmUserSummaryRelativeTimeTest.php
  • docs/农场用户信息汇总页面相对时间显示优化说明.md

新增的文件

  • docs/小数位数优化完成总结.md

后续建议

  1. 监控用户反馈: 观察用户对新的时间显示格式的接受度
  2. 性能优化: 如果页面访问量大,可以考虑缓存计算结果
  3. 国际化支持: 为不同语言环境提供相应的时间格式
  4. 移动端适配: 确保在移动设备上的显示效果良好

总结

通过这次小数位数优化,我们成功解决了时间显示过于冗长的问题,提升了用户体验。优化后的显示既保持了必要的精度,又确保了良好的可读性,是一个平衡实用性和用户体验的成功案例。