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

Posted

技术标签:

【中文标题】尝试用前导空格填充十进制数【英文标题】:Trying to pad decimal number with leading spaces 【发布时间】:2012-11-29 19:47:36 【问题描述】:
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: 尝试了 Lucas 的建议,但它不起作用。这是我得到的。

cartDetails.Append(String.Format("0:0,10", oForm.LineItems[iCount].Quantity));

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

如果我改变 String.Format("0:0,4", 所有记录都显示 04

【问题讨论】:

为什么不使用AppendFormat @lazyberezovsky:你能举个例子吗? 【参考方案1】:

您可以使用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

【讨论】:

我尝试了你的方法,对于 lineItem.Price 有小数位的它不会修剪到 2 位数字,如果它是偶数(比如 157)它不会输出为 157.00。我尝试使用 foreach 但 lineItem 不显示 lineitem 内的数量和价格。 @NewCoder 刚刚验证 - 0,10:0.00 将十进制修剪为 2 位。 IE。 34.123 将显示为 34.12。验证您的代码。 修剪为2位,但当为157时,不输出为157.00。 @NewCoder 验证您的代码。 0.00 会将 157 格式化为 157.000.## 将 157 格式化为 157 现在可以正常使用了。你能建议为什么我使用 foreach 循环时 lineItem 不起作用。谢谢。【参考方案2】:

备注:这是为了在基于字符的表示(例如文本文件)中对齐

看看composite formatting (MSDN)的最后一节。

首先根据需要格式化数字并填充结果

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

补充:如果您想将数据放置在 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>

【讨论】:

cartDetails.Append(String.Format("0:0,10", oForm.LineItems[iCount].Quantity));当我尝试这个时,无论 oForm.LineItems[iCount].Quantity 中的值如何,它都会为每一行显示 10。如果我更改为 String.Format("0:0,4",它会显示所有记录的 04。 好的,我明白了,只有字符串用空格填充。将更新我的示例。 我发现 text-align 在这里很重要,但我错过了。

以上是关于尝试用前导空格填充十进制数的主要内容,如果未能解决你的问题,请参考以下文章

为啥用前导零来表示八进制数?

为啥用前导零来表示八进制数?

oracle forms 12. 如何显示十进制数的前导零

C编程十进制到二进制 - 将前导零添加到递归方法

将十六进制数转换为十进制数

java_二进制的前导的零