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

时间:2014-01-30 18:20:31

标签: c# string-formatting

我从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]), 

在我的班级Price中设置为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)

但仍然无效。

3 个答案:

答案 0 :(得分:21)

您正在寻找"0:C2",请参阅Standard Numeric Format Strings

  

精确说明符:小数位数

样品:

 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

答案 1 :(得分:2)

此答案假定您的本地货币符号为$

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

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

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

priceAsDecimal.ToString("C");

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

答案 2 :(得分:1)

decimal没有“格式” - 它们只是一个数字。您似乎正在尝试将格式“分配”到Price列,而您无法执行此操作。根据您的第一个代码示例,您似乎可以将CSV输入解析为十进制。

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