将十进制值格式化为带有2位小数的货币

我从csv文件中获取数据并将其解析为我的应用程序。 在我的csv文件中,我有一个列price ,我使用的值当然是我项目中项目的价格。

但是,csv文件中的价格不包含尾随0,例如,如果物品的价格是$5.00 ,则csv文件的价格是$5 ,如果价格是$9.60 ,则csv将其定为$9.6 。 其他价格如$9.56也不错。

这是我从csv文件中检索价格的方法:

  Price = string.IsNullOrEmpty(columns[3].Trim()) ? null : (decimal?)decimal.Parse(columns[3]), 

在我的class级中, Price是否设为public decimal? Price { get; set; } public decimal? Price { get; set; } public decimal? Price { get; set; }

如何格式化返回的内容以解决此问题?

 Price = String.Format("Price: {0:C}", string.IsNullOrEmpty(columns[3].Trim()) ? null : (decimal?)decimal.Parse(columns[3])); 

我尝试了以上但没有奏效。

我如何修复它,使csv中的值为$5.9的格式为$5.90

编辑:

尝试:

 Price=decimal.Round(string.IsNullOrEmpty(columns[3].Trim()) ? null : (decimal?)decimal.Parse(columns[3]), 2, MidpointRounding.AwayFromZero); 

不确定我是否做得对吗?

另外,我不确定如何在我的代码中使用以下选项:

 decimalVar.ToString ("#.##"); 

还尝试过:

  Price = string.IsNullOrEmpty(columns[3].Trim()) ? null : (decimal?)decimal.Parse(columns[3], NumberStyles.Currency) 

但仍然行不通。

您正在寻找"0:C2"请参阅标准数字格式字符串

精度说明符:小数位数

样品:

  String.Format("{0:C2}", 5d); //results in $5.00 String.Format("{0:C2}", 5.9d); //results in $5.90 String.Format("{0:C2}", 5.123d); //results in $5.12 

这个答案将假设您的本地货币符号是$

使用Decimal.Parse(String, NumberStyles)来解析字符串,即:

 string priceFromCsv = "$5"; var priceAsDecimal = Decimal.Parse(priceFromCsv, NumberStyles.Currency); 

然后使用格式为“C”的Decimal.ToString(String)返回完全形成的货币,即

 priceAsDecimal.ToString("C"); 

这将为您提供具有正确小数位数的完全形成的货币。

decimal s没有“格式” – 它们只是一个数字。 看起来您正在尝试将格式“分配”到“ Price列,而这是您无法做到的。 根据您的第一个代码示例,您似乎能够将CSV输入解析为十进制就好了。

您可以在显示值时选择格式,但未指明发生的位置。 在应用程序中? 一份报告? 另一个CSV?