diff --git a/backend/services/trading-service/src/application/services/price.service.ts b/backend/services/trading-service/src/application/services/price.service.ts index b35a202b..f9ed09a4 100644 --- a/backend/services/trading-service/src/application/services/price.service.ts +++ b/backend/services/trading-service/src/application/services/price.service.ts @@ -104,8 +104,8 @@ export class PriceService { burnMultiplier: burnMultiplier.toFixed(18), minuteBurnRate: minuteBurnRate.toFixed(18), snapshotTime: new Date(), - // 保留8位小数,确保每分钟销毁带来的微小涨幅在前端可见 - priceChangePercent: priceChangePercent.toFixed(8), + // 保留12位小数,确保每分钟销毁带来的微小涨幅在前端可见 + priceChangePercent: priceChangePercent.toFixed(12), initialPrice: initialPrice.toFixed(18), }; } @@ -265,8 +265,8 @@ export class PriceService { burnMultiplier: burnMultiplier.toFixed(18), minuteBurnRate: snapshot.minuteBurnRate.toFixed(18), snapshotTime: snapshot.snapshotTime, - // 保留8位小数,确保每分钟销毁带来的微小涨幅在前端可见 - priceChangePercent: priceChangePercent.toFixed(8), + // 保留12位小数,确保每分钟销毁带来的微小涨幅在前端可见 + priceChangePercent: priceChangePercent.toFixed(12), initialPrice: initialPrice.toFixed(18), }; } diff --git a/frontend/mining-app/lib/core/utils/format_utils.dart b/frontend/mining-app/lib/core/utils/format_utils.dart index 94bdac68..4b89f23b 100644 --- a/frontend/mining-app/lib/core/utils/format_utils.dart +++ b/frontend/mining-app/lib/core/utils/format_utils.dart @@ -70,6 +70,33 @@ String formatPrice(String? value) { } } +/// 与 formatPrice 相同逻辑,但不使用 0.0{n} 缩写,直接展示完整的0 +String formatPriceFull(String? value) { + 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.zero) return '0'; + final str = decimal.toStringAsFixed(18); + final dotIndex = str.indexOf('.'); + int zeroCount = 0; + for (int i = dotIndex + 1; i < str.length; i++) { + if (str[i] == '0') { + zeroCount++; + } else { + break; + } + } + // 截取到前导零 + 7位有效数字 + final sigEnd = dotIndex + 1 + zeroCount + 7; + final end = sigEnd > str.length ? str.length : sigEnd; + return str.substring(0, end); + } catch (e) { + return '0'; + } +} + String formatAmount(String? value) { return formatDecimal(value, 4); } 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 0de50c3f..ff738bed 100644 --- a/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart +++ b/frontend/mining-app/lib/presentation/pages/trading/trading_page.dart @@ -179,7 +179,7 @@ class _TradingPageState extends ConsumerState { textBaseline: TextBaseline.alphabetic, children: [ AmountText( - amount: priceInfo != null ? formatPrice(price) : null, + amount: priceInfo != null ? formatPriceFull(price) : null, isLoading: isLoading, style: const TextStyle( fontSize: 30, @@ -219,8 +219,8 @@ class _TradingPageState extends ConsumerState { ), const SizedBox(width: 4), DataText( - // 显示6位小数,确保每分钟销毁引起的涨幅尾数可见 - data: isLoading ? null : '$sign${changePercent.toStringAsFixed(6)}%', + // 显示10位小数,确保每分钟销毁引起的涨幅尾数可见 + data: isLoading ? null : '$sign${changePercent.toStringAsFixed(10)}%', isLoading: isLoading, placeholder: '+--.--%', style: TextStyle( 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 71133234..1b2ae3e9 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 @@ -743,7 +743,7 @@ class _KlineChartWidgetState extends State { } } final sigStart = dotIndex + 1 + zeroCount; - final sigEnd = math.min(sigStart + 7, str.length); + final sigEnd = math.min(sigStart + 4, str.length); final significant = str.substring(sigStart, sigEnd); return '0.0{$zeroCount}$significant'; } diff --git a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_painter.dart b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_painter.dart index d4ae8c98..6858d1ea 100644 --- a/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_painter.dart +++ b/frontend/mining-app/lib/presentation/widgets/kline_chart/kline_painter.dart @@ -567,7 +567,7 @@ class KlinePainter extends CustomPainter { } } final sigStart = dotIndex + 1 + zeroCount; - final sigEnd = math.min(sigStart + 7, str.length); + final sigEnd = math.min(sigStart + 4, str.length); final significant = str.substring(sigStart, sigEnd); return '0.0{$zeroCount}$significant'; }