You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将自定义列表中的字符串值格式化为货币格式?

问题描述
  • 需求:把从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:02:36