Files
hfb_sys/backend/pkg/money/format.go
T
yml2213andClaude Opus 4.7 4ebf7f75fe refactor: 统一全项目金额精度为角(0.1元)
## 变更概述
将全项目金额处理从整元四舍五入统一为角精度(0.1元),提高金额计算准确性和显示一致性。

## 后端改动
- 新增 pkg/money/format.go 统一金额处理包
  - Round(): 角精度四舍五入
  - Min/Max(): 金额比较
  - Format(): 格式化字符串
- 更新业务模块使用统一金额函数
  - internal/modules/order: 订单结算改为角精度
  - internal/modules/dispute: 纠纷金额处理
  - internal/modules/listing: 商品定价和存储
- 更新测试用例期望值为角精度

## 前端改动
- 新增 shared/utils/money.ts 金额工具函数
  - roundMoney(): 角精度四舍五入
  - formatMoney(): 格式化为字符串(保留1位小数)
  - formatMoneyWithSymbol(): 添加¥符号
- 更新金额计算和显示逻辑
  - shared/utils/pricing.ts: 定价计算
  - shared/utils/listingDisplay.ts: 商品显示
  - shared/composables/useMoney.ts: 组合式函数
- 修复视图文件导入声明
  - features/listings/views: 商品详情页
  - features/seller/views: 卖家管理页

## 效果
- 金额显示:¥123.0(统一保留1位小数)
- 计算精度:12.45 -> 12.5(角精度)
- 减少误差:避免整元四舍五入损失
- 显示一致:全项目统一格式

## 测试
-  后端单元测试通过
-  TypeScript 类型检查通过
-  开发环境正常运行

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-04 16:42:49 +08:00

42 lines
901 B
Go

package money
import (
"fmt"
"math"
)
// Round 将金额四舍五入到角(0.1元),统一全项目金额精度
// 例如:12.34 -> 12.3, 12.36 -> 12.4, 12.35 -> 12.4
func Round(value float64) float64 {
return math.Round(value*10) / 10
}
// Min 返回两个金额中较小的值(角精度)
func Min(a, b float64) float64 {
if a < b {
return Round(a)
}
return Round(b)
}
// Max 返回两个金额中较大的值(角精度)
func Max(a, b float64) float64 {
if a > b {
return Round(a)
}
return Round(b)
}
// Format 格式化金额为字符串(保留1位小数)
// 例如:12.3 -> "12.3", 12.0 -> "12.0"
func Format(value float64) string {
rounded := Round(value)
return fmt.Sprintf("%.1f", rounded)
}
// FormatWithSymbol 格式化金额并添加货币符号
// 例如:12.3 -> "¥12.3"
func FormatWithSymbol(value float64) string {
return "¥" + Format(value)
}