091159-重构数字助手类为NumberWan.md 6.0 KB

重构数字助手类为NumberWan:简化功能保持专一性

时间: 2025年06月09日 11:59
任务: 类名改为NumberWan,移除千分位相关的内容,移除旧版兼容内容

任务概述

用户要求重构数字助手类,将类名改为 NumberWan,移除千分位相关功能和旧版兼容内容,保持类的简洁性和专一性,专注于万分位和中文数位单位转换功能。

实现内容

1. 类名重构

  • 原类名: UCore\Helper\Number
  • 新类名: UCore\Helper\NumberWan
  • 定位: 专注于万分位和中文数位单位的数字格式化、转换功能

2. 移除的功能

千分位相关方法

  • formatThousands() - 标准千分位格式化
  • formatThousandsPrecision() - 高精度千分位格式化
  • addThousandsSeparator() - 手动添加千分位分隔符

旧版兼容方法

  • formatToWan() (低精度版本) - 保留高精度版本作为主要方法
  • parseFromWan() (低精度版本) - 保留高精度版本作为主要方法
  • smartFormat() (低精度版本) - 保留高精度版本作为主要方法

3. 方法重命名

去掉"Precision"后缀,使高精度方法成为主要方法

  • formatToWanPrecision()formatToWan()
  • parseFromWanPrecision()parseFromWan()
  • smartFormatPrecision()smartFormat()
  • validatePrecision()validate()
  • truncatePrecision()truncate()

4. 保留的核心功能

万分位转换

  • formatToWan() - 万分位数据表示转换
  • parseFromWan() - 万分位反向转换

中文数位单位转换

  • formatToChineseUnits() - 中文数位单位转换(完整/简化模式)
  • formatToSmartChineseUnits() - 智能中文数位单位转换
  • parseFromChineseUnits() - 中文数位单位反向转换

智能格式化

  • smartFormat() - 智能选择万分位或中文数位单位

精度管理

  • validate() - 数字精度验证
  • truncate() - 数字精度截取

5. 技术特性

  • 40位精度支持: 20位整数 + 20位小数
  • BC数学函数: 确保精度不丢失
  • 中文数位单位: 万(10^4)、亿(10^8)、兆(10^12)、京(10^16)、垓(10^20)
  • 高精度处理: 所有方法使用字符串进行数值传递和返回

6. 测试验证

通过全面测试验证了重构后的功能:

万分位转换测试:
12345                               -> 1万2345
123456                              -> 12万3456
12345678901234567890                -> 1234567890123456万7890
12345678901234567890.123456789      -> 1234567890123456万7890.123456789

中文数位单位转换测试(完整模式):
12345678901234567890                -> 1234京5678兆9012亿3456万7890
123456789012345678901234            -> 1234垓5678京9012兆3456亿7890万1234

中文数位单位转换测试(简化模式):
12345678901234567890                -> 1234京5678901234567890
123456789012345678901234            -> 1234垓56789012345678901234

智能格式化测试:
12345                               -> 万分位: 1万2345 | 中文单位: 1万2345
12345678901234567890                -> 万分位: 1234567890123456万7890 | 中文单位: 1234京5678901234567890

精度验证测试:
12345678901234567890.12345678901234567890          -> ✓ 有效
123456789012345678901.12345678901234567890         -> ✗ 无效 (21位整数)

使用示例

基本万分位转换

use UCore\Helper\NumberWan;

// 万分位转换
echo NumberWan::formatToWan('12345678901234567890.123456789');
// 输出: 1234567890123456万7890.123456789

// 万分位反向转换
echo NumberWan::parseFromWan('1万.123456789');
// 输出: 10000.123456789

中文数位单位转换

// 完整模式
echo NumberWan::formatToChineseUnits('12345678901234567890');
// 输出: 1234京5678兆9012亿3456万7890

// 简化模式
echo NumberWan::formatToChineseUnits('12345678901234567890', 20, true);
// 输出: 1234京5678901234567890

// 反向转换
echo NumberWan::parseFromChineseUnits('1234京5678兆9012亿3456万7890');
// 输出: 12345678901234567890

智能格式化

// 启用中文数位单位
echo NumberWan::smartFormat('12345678901234567890', 20, true);
// 输出: 1234京5678901234567890

// 使用万分位
echo NumberWan::smartFormat('12345678901234567890');
// 输出: 1234567890123456万7890

在后台控制器中使用

// Grid中使用万分位表示
$grid->column('balance', '余额')->display(function ($value) {
    return NumberWan::formatToWan($value);
});

// Grid中使用中文数位单位
$grid->column('amount', '金额')->display(function ($value) {
    return NumberWan::formatToSmartChineseUnits($value);
});

// 智能格式化(启用中文数位单位)
$grid->column('total', '总计')->display(function ($value) {
    return NumberWan::smartFormat($value, 20, true);
});

设计优势

  1. 专一性: 专注于万分位和中文数位单位转换,避免功能冗余
  2. 简洁性: 移除千分位相关功能,减少代码复杂度
  3. 一致性: 统一使用高精度方法,避免版本混乱
  4. 易用性: 方法命名简洁明了,易于理解和使用
  5. 高性能: 专注核心功能,提升执行效率

提交信息

重构数字助手类:重命名为NumberWan并简化功能

- 类名从Number改为NumberWan,专注万分位转换功能
- 移除千分位相关方法:formatThousands()、formatThousandsPrecision()、addThousandsSeparator()
- 移除旧版兼容方法:formatToWan()、parseFromWan()、smartFormat()的低精度版本
- 简化方法命名:去掉Precision后缀,使高精度方法成为主要方法
- 保留核心功能:万分位转换、中文数位单位转换、精度管理
- 更新使用说明文档,反映类名和方法变化
- 保持类的简洁性和专一性,避免功能冗余

完成状态

✅ 任务已完成并提交到代码仓库
✅ 类重构完成,功能测试通过
✅ 文档更新完成
✅ 代码已推送到远程仓库
✅ 实现了简洁专一的设计目标