我想将使用math.round(变量,2)舍入的小数格式化为货币格式,因此它总是将4转换为4.00。我试着这样做:
public ProductItem(String itemNo, String description, String unitOfMeasure, decimal unitPriceExclVAT, decimal purchasePrice, decimal margin, int actualStock, String imagePath)
{
this.ItemNo = itemNo;
this.Description = description;
this.UnitOfMeasure = unitOfMeasure;
this.UnitPriceExclVAT = Math.Round(unitPriceExclVAT, 2);
this.PurchasePrice = Math.Round(purchasePrice, 2);
this.Margin = Math.Round(margin, 2);
this.ActualStock = actualStock;
this.ImagePath = imagePath;
}
public string ItemNo { get; private set; }
public string Description { get; private set; }
public string UnitOfMeasure { get; private set; }
public decimal UnitPriceExclVAT { get; set; }
public decimal PurchasePrice { get; set; }
public decimal Margin { get; set; }
public int ActualStock { get; private set; }
public string ImagePath { get; private set; }
foreach (JsonValue itemValue in groupObject["Items"].GetArray())
{
if (uniqueGroupItemsCount != 36)
{
JsonObject itemObject = itemValue.GetObject();
ProductItem product = new ProductItem(itemObject["ItemNo"].GetString(),
itemObject["Description"].GetString(),
itemObject["UnitOfMeasure"].GetString(),
Convert.ToDecimal(itemObject["UnitPriceExclVAT"].GetString().Replace(',', '.')),
Convert.ToDecimal(itemObject["PurchasePrice"].GetString().Replace(',', '.')),
Convert.ToDecimal(itemObject["Margin"].GetString().Replace(',', '.')),
Convert.ToInt32(itemObject["ActualStock"].GetString().Replace(',', '.')),
itemObject["ImagePath"].GetString());
if (product.Description.ToString().ToLower().Trim().Contains(productItems) || product.ItemNo.ToString().ToLower().Trim().Contains(productItems))
{
var money = Convert.ToDecimal(string.Format("{0:C}", product.Margin));//here is where it goes wrong, i know i can format it like this, but its not working.
product.Margin = money;
searchedGroup.Items.Add(product);
uniqueGroupItemsCount++;
}
上面的代码会给我一个错误。 错误是:类型' System.FormatException'发生在mscorlib.dll中但未在用户代码中处理
我希望你能帮助我:)。
编辑:它不需要像20.00欧元这样的货币值,只有20.00对我来说足够好,因为我可以在XAML中签署欧元。
答案 0 :(得分:1)
只要使用product.Margin.ToString(" C")当您想要显示该项目时,您就无法将其存储为十进制字段中的货币
答案 1 :(得分:0)
如上所述,字符串格式化功能仅在您尝试显示值时有用。对于您发布的代码,string.Format("{0:C}", product.Margin)
导致使用货币符号格式化的字符串,这导致Convert.ToDecimal()
调用抛出异常。
如果我正确理解您的更新,您唯一关注格式化的时间是将结果显示给用户。在这种情况下,您应该考虑使用value converter将十进制值转换为格式化字符串以供显示。