From 254796b08dee8d349c64c650125801a225c4c66e Mon Sep 17 00:00:00 2001 From: hailin Date: Fri, 6 Feb 2026 07:46:28 -0800 Subject: [PATCH] =?UTF-8?q?feat(mining-app):=20=E6=8F=90=E5=8D=87=E4=BB=B7?= =?UTF-8?q?=E6=A0=BC=E6=98=BE=E7=A4=BA=E5=B0=8F=E6=95=B0=E7=B2=BE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - K线详情弹窗(开/高/低/收):小数位数增加5位 - 价格≥1: 4位 → 9位 - 价格0.0001~1: 6位 → 11位 - 超小价格有效数字: 4位 → 9位 - 兑换页面"当前积分股价值":小数位数增加2位 - formatPriceFull 新增 extraDecimals 可选参数,支持按需增加精度 - 调用时传入 extraDecimals: 2 - 资产页面"总资产估值":小数位数从4位增加到6位 - formatAmount(4位) → formatDecimal(6位) Co-Authored-By: Claude Opus 4.6 --- frontend/mining-app/lib/core/utils/format_utils.dart | 11 ++++++----- .../lib/presentation/pages/asset/asset_page.dart | 2 +- .../lib/presentation/pages/trading/trading_page.dart | 2 +- .../widgets/kline_chart/kline_chart_widget.dart | 6 +++--- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/frontend/mining-app/lib/core/utils/format_utils.dart b/frontend/mining-app/lib/core/utils/format_utils.dart index 4b89f23b..d496a607 100644 --- a/frontend/mining-app/lib/core/utils/format_utils.dart +++ b/frontend/mining-app/lib/core/utils/format_utils.dart @@ -71,12 +71,13 @@ String formatPrice(String? value) { } /// 与 formatPrice 相同逻辑,但不使用 0.0{n} 缩写,直接展示完整的0 -String formatPriceFull(String? value) { +/// [extraDecimals] 可额外增加小数位数 +String formatPriceFull(String? value, {int extraDecimals = 0}) { if (value == null || value.isEmpty) return '0'; try { final decimal = Decimal.parse(value); - if (decimal >= Decimal.one) return decimal.toStringAsFixed(4); - if (decimal >= Decimal.parse('0.0001')) return decimal.toStringAsFixed(6); + if (decimal >= Decimal.one) return decimal.toStringAsFixed(4 + extraDecimals); + if (decimal >= Decimal.parse('0.0001')) return decimal.toStringAsFixed(6 + extraDecimals); if (decimal <= Decimal.zero) return '0'; final str = decimal.toStringAsFixed(18); final dotIndex = str.indexOf('.'); @@ -88,8 +89,8 @@ String formatPriceFull(String? value) { break; } } - // 截取到前导零 + 7位有效数字 - final sigEnd = dotIndex + 1 + zeroCount + 7; + // 截取到前导零 + 7位有效数字 + extraDecimals + final sigEnd = dotIndex + 1 + zeroCount + 7 + extraDecimals; final end = sigEnd > str.length ? str.length : sigEnd; return str.substring(0, end); } catch (e) { diff --git a/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart b/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart index 9286c76e..bfa5b2fb 100644 --- a/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart +++ b/frontend/mining-app/lib/presentation/pages/asset/asset_page.dart @@ -366,7 +366,7 @@ class _AssetPageState extends ConsumerState { const SizedBox(height: 8), // 金额 - 实时刷新显示 AmountText( - amount: displayValue != null ? formatAmount(displayValue) : null, + amount: displayValue != null ? formatDecimal(displayValue, 6) : null, isLoading: isLoading, suffix: ' 积分值', style: const TextStyle( diff --git a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart index fc16969c..18b8a807 100644 --- a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart +++ b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart @@ -214,7 +214,7 @@ class _TradingPageState extends ConsumerState { textBaseline: TextBaseline.alphabetic, children: [ AmountText( - amount: priceInfo != null ? formatPriceFull(price) : null, + amount: priceInfo != null ? formatPriceFull(price, extraDecimals: 2) : null, isLoading: isLoading, style: const TextStyle( fontSize: 30, diff --git a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart index 1b2ae3e9..632c4e10 100644 --- a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart +++ b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_chart_widget.dart @@ -728,8 +728,8 @@ class _KlineChartWidgetState extends State { } String _formatPrice(double price) { - if (price >= 1) return price.toStringAsFixed(4); - if (price >= 0.0001) return price.toStringAsFixed(6); + if (price >= 1) return price.toStringAsFixed(9); + if (price >= 0.0001) return price.toStringAsFixed(11); if (price <= 0) return '0'; // 0.00000980 → 0.0{5}980 final str = price.toStringAsFixed(18); @@ -743,7 +743,7 @@ class _KlineChartWidgetState extends State { } } final sigStart = dotIndex + 1 + zeroCount; - final sigEnd = math.min(sigStart + 4, str.length); + final sigEnd = math.min(sigStart + 9, str.length); final significant = str.substring(sigStart, sigEnd); return '0.0{$zeroCount}$significant'; }