好的,我有一个ListBox,它显示了绑定列表中的产品(它们是自定义类,并且具有ID,名称,价格)。我希望ListBox显示项目名称和价格。列表框(lbProductsChosen)将“DataTextField”设置为Name,并将DataValueField设置为ID。我正在使用PreRender事件来检查每个项目,从绑定列表(blProducts)等查看其价格,它的效果很好。我得到了列表中显示的名称和价格。但是,当它显示时,尽管我使用String.Format格式化它,结果仍然是一个十进制数字(例如3.20000),它看起来很丑陋。有谁知道它为什么要显示它,但没有显示它我想要它的格式化。
protected void lbProductsChosen_PreRender(object sender, EventArgs e)
{
foreach (ListItem item in lbProductsChosen.Items)
{
string currentDescription = item.Text;
int convertedValue = Convert.ToInt32(item.Value);
for (int i = 0; i < blProducts.Count; i++)
{
if (blProducts[i].ProductID == convertedValue)
{
decimal ItemPrice = blProducts[i].Price;
string convertedPrice = ItemPrice.ToString();
string currentPrice = String.Format("{0:c}", convertedPrice);
string currentDescriptionPadded = currentDescription.PadRight(30);
item.Text = currentDescriptionPadded + currentPrice;
}
}
}
}
答案 0 :(得分:0)
MSDN说明了String.Format
方法的以下内容。
通常,通过使用CultureInfo.CurrentCulture属性返回的当前区域性的约定,将参数列表中的对象转换为其字符串表示形式。
如果您使用货币格式说明符c
,它将使用系统设置中定义的货币格式。看一下control panel
- &gt; region
- &gt; additional settings
- &gt; currency
。也许你搞砸了那里的设置。
如果您想忽略对货币有意义的本地设置,您可以执行以下操作。 (以美元为例,总计两位小数)
decimal price = 12.10999999m;
String.Format("${0:0.00}", price);
$ 12.10条
请注意String.Format
没有正确对数字进行舍入,只是将其剪掉。