You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现收据字符串右对齐?现有代码对齐异常求助

解决字符串文本右对齐(价格对齐)的问题

看起来你现在的核心问题是价格部分无法稳定右对齐,根源在于格式化字符串的方式有误,以及对行长度的计算没有排除换行符的干扰。我来帮你调整代码,实现商品信息左对齐、价格整体右对齐的效果:

关键修正点

  • 不要将累积的DadosPedido直接传入String.Format,应该先单独构建当前行的左右部分,再格式化后追加到DadosPedido
  • 计算行长度时排除换行符\n,避免影响总宽度的计算
  • 使用更可靠的对齐语法,确保价格区域的宽度固定或动态适配总宽度

修改后的代码示例

主商品行的修正

// 构建当前行的左侧文本(不含价格)
string leftPart = $"{Quantidade}x {item}";
// 价格文本(格式化后)
string priceText = preco;

// 总宽度固定为80,右侧价格区域预留足够宽度(比如12字符,适配货币格式)
int totalWidth = 80;
int priceAreaWidth = 12;
int leftAreaWidth = totalWidth - priceAreaWidth;

// 格式化:左侧左对齐占满leftAreaWidth,右侧右对齐占满priceAreaWidth
string formattedLine = String.Format("{0,-" + leftAreaWidth + "}{1," + priceAreaWidth + "}\n", leftPart, priceText);

// 将格式化后的行追加到DadosPedido
DadosPedido += formattedLine;

附加商品行的修正

// 构建附加商品的左侧文本
string addonLeftPart = $" - {Qtd}x {Item}";
string addonPriceText = preco_addon;

// 同样使用80总宽度,价格区域宽度保持一致(确保对齐)
string formattedAddonLine = String.Format("{0,-" + leftAreaWidth + "}{1," + priceAreaWidth + "}\n", addonLeftPart, addonPriceText);

DadosPedido += formattedAddonLine;

为什么原来的代码会失效?

  1. 错误的Format参数:你之前把DadosPedido + ...作为{0}的内容,这会把之前累积的所有文本都当作当前行的左侧部分,导致Format无法正确计算当前行的对齐位置。
  2. 包含换行符的长度计算:你计算qtdLinhaPedido时包含了\n,这会让qtd_pontos的计算值偏小,导致填充的空格不够,价格无法右对齐到正确位置。
  3. 动态宽度的不可靠性:通过80 - qtdLinhaPedido计算价格区域宽度,会因为左侧文本长度不一导致价格的起始位置波动,固定价格区域宽度能确保所有价格对齐在同一竖线上。

如果需要更灵活的动态宽度(比如根据最长的左侧文本调整),可以先收集所有左侧文本,计算最大长度后再统一设置左侧区域宽度,但固定价格区域宽度在打印场景(比如80mm小票)会更稳定。

内容的提问来源于stack exchange,提问作者Matheus Arruda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:18:49