尝试使用前导空格填充十进制数字

时间:2012-11-29 19:47:37

标签: c# decimal string-formatting format-string padleft

for (int iCount = 0; iCount < oForm.LineItems.Count; iCount++)
           {

// cartDetails是一个字符串构建器。

     cartDetails.Append(String.Format("{0:0}", oForm.LineItems[iCount].Quantity));
     cartDetails.Append(String.Format("{0:0.00}", oForm.LineItems[iCount].Price));
     cartDetails.Append(String.Format("{0:0.00}", oForm.LineItems[iCount].ExtendedPrice));

     //cartDetails.Append(string.Format("{0,10:#,##0.00}", oForm.LineItems[iCount].Price) + "</TD><TD>");
     //cartDetails.Append(string.Format("{0,10:#,##0.00}", oForm.LineItems[iCount].ExtendedPrice) + "</TD><TD>");
     //cartDetails.Append(String.Format("{0}", oForm.LineItems[iCount].Quantity).PadLeft(4)+ "</TD><TD>");
     //cartDetails.Append(String.Format("{0:0.00}", oForm.LineItems[iCount].Price).PadLeft(8) + "</TD><TD>");

我已经使用了我正在使用的源代码。我添加数量,价格,扩展价格和所有都是十进制列。我要做的就是用左边的空间填充。小数舍入为2位似乎正在发生。

上面那些注释的行是我尝试过的其他一些选项。 目前,如果qty具有诸如4和40之类的值,则当我将它们打印在表格中时它们不会对齐。与价格相同。

有人请建议我在这做什么?

更新1:尝试了卢卡斯的建议,但它无效。这就是我要做的事。

cartDetails.Append(String.Format(“{0:0,10}”,oForm.LineItems [iCount] .Quantity));

当我尝试上述操作时,无论oForm.LineItems [iCount]中的值如何,每行显示10个.Quantity。

如果我改变了 String.Format(“{0:0,4}”,它显示04为所有记录

2 个答案:

答案 0 :(得分:5)

您可以使用AppendFormat方法而不是附加格式化字符串。 正确的格式也是{index,padding:format}。并考虑使用foreach代替for

foreach (var lineItem in oForm.LineItems)
{ 
    cartDetails.AppendFormat("{0,4:0}", lineItem.Quantity);
    cartDetails.AppendFormat("{0,10:0.00}", lineItem.Price);
    // etc
}

答案 1 :(得分:1)

备注:这是用于基于字体的表示(如文本文件)中的对齐

查看composite formatting (MSDN)中的最后一部分。

首先根据需要格式化数字,然后填充结果

cartDetails.AppendFormat("{0,4}", // padding with spaces
    String.Format("{0:0}", oForm.LineItems[iCount].Quantity));  // format number

Addtition:如果您想将数据放在html表中,则应使用css(或内联样式)

<td class="right">This is right aligned</td>

用css

.right { text-align: right; }

或内联:

<td style="text-align: right">This is right aligned</td>