如何将自定义列表中的字符串值格式化为货币格式?
问题描述
- 需求:把从SQL数据库获取的字符串格式化为
$999,888,432.23样式,同时去除末尾多余的零(比如当前输出5921.1500000000,要处理成保留两位小数、带千分位和美元符号的格式) - 尝试过的代码无效果:
for (int i = 0; i < Sort_List.Count; i++) { Sort_List[i].DollarsOpen = string.Format("{0:0.00}", Sort_List[i].DollarsOpen); }
- 更新信息:
JTPosOpen类中DollarsOpen字段定义为string类型,但原始数据库中是decimal类型:
public class JTPosOpen { public string PoDate; public string VendorNo; public string Vendor; public string PONumber; public string POLine; public string QtyOrdered; public string QtyReceived; public string QtyRemaining; public string UOM; public string ExpUnitCost; public string DollarsOpen; public string GLAcct; public string GLCtr; public string JobNo; public string ItemNo; public string Desc1; public string Desc2; public string RequestDate; }
解决方案
核心问题
之前的代码无效是因为格式符只对数值类型生效,直接格式化字符串不会触发数值格式化逻辑,必须先把字符串转成数值类型再处理。
可行代码示例
// 需要引入System.Globalization for (int i = 0; i < Sort_List.Count; i++) { // 先将字符串转为decimal,避免转换失败抛出异常 if (decimal.TryParse(Sort_List[i].DollarsOpen, out decimal amount)) { // 方式1:用内置货币格式C2,自动生成美元符号、千分位,保留两位小数 Sort_List[i].DollarsOpen = amount.ToString("C2", CultureInfo.GetCultureInfo("en-US")); // 方式2:自定义格式字符串,效果和C2一致 // Sort_List[i].DollarsOpen = string.Format("$#,##0.00", amount); } else { // 处理转换失败的情况,比如赋值默认值或保留原字符串 Sort_List[i].DollarsOpen = "无效金额"; } }
关键说明
- 显式指定
en-US文化区域是为了确保美元符号$和千分位格式符合需求,避免系统默认文化影响结果; - 使用
TryParse而非直接Parse,能避免因字符串格式错误(比如空值、非数字字符)导致的程序崩溃; - 转换后格式化会自动去除末尾多余的零,同时保留两位小数并添加千分位分隔符。
内容的提问来源于stack exchange,提问作者Primdonm
相关产品推荐
相关产品推荐

