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

use*_*078 10 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]), 
Run Code Online (Sandbox Code Playgroud)

在我的班级Price设置为public decimal? Price { get; set; }.

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

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

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

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

编辑:

尝试:

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

不确定我是否做对了?

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

decimalVar.ToString ("#.##");
Run Code Online (Sandbox Code Playgroud)

还尝试过:

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

但仍然行不通.

Ale*_*kov 23

您正在寻找"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
Run Code Online (Sandbox Code Playgroud)


Luk*_*oid 5

此答案假设您的本地货币符号是$

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

string priceFromCsv = "$5";
var priceAsDecimal = Decimal.Parse(priceFromCsv, NumberStyles.Currency);
Run Code Online (Sandbox Code Playgroud)

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

priceAsDecimal.ToString("C");
Run Code Online (Sandbox Code Playgroud)

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