尝试用前导空格填充十进制数
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.00
。 0.##
将 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 在这里很重要,但我错过了。以上是关于尝试用前导空格填充十进制数的主要内容,如果未能解决你的问题,请参考以下文章