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'; }