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

如何在Dot Liquid与C#中创建自定义金额格式化过滤器

Dot Liquid 自定义数字千分位格式化方案

针对将数值格式化为千分位用.、小数分隔用,的欧陆金额格式需求,不需要依赖第三方扩展,直接按以下步骤实现自定义过滤器即可,代码可直接复用。

具体实现步骤

  • 编写自定义过滤器静态类
    Dot Liquid的过滤器规则为:静态类中的公共静态方法会被识别为可用过滤器,方法第一个参数为模板传入的待处理值,后续参数为过滤器调用时可传入的自定义参数。
    using DotLiquid;
    using System.Globalization;
    
    public static class CustomLiquidFilters
    {
        /// <summary>
        /// 格式化数字为千分位.、小数分隔,的欧陆格式,默认保留2位小数
        /// </summary>
        /// <param name="input">待格式化的数值(支持数字类型、字符串类型的数字)</param>
        /// <param name="decimalDigits">保留小数位数,默认2位</param>
        public static string EuroNumber(object input, int decimalDigits = 2)
        {
            // 空值、非数字兼容处理,避免渲染报错
            if (input == null || !decimal.TryParse(input.ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out decimal numValue))
            {
                return input?.ToString() ?? string.Empty;
            }
    
            // 德式文化默认规则正好匹配:千分位分隔符为.,小数分隔符为,
            var deCulture = new CultureInfo("de-DE");
            return numValue.ToString($"N{decimalDigits}", deCulture);
        }
    }
    
  • 注册过滤器到Dot Liquid引擎
    在程序启动初始化阶段执行一次注册即可,全局生效:
    Template.RegisterFilter(typeof(CustomLiquidFilters));
    
  • 模板中调用过滤器
    渲染表格单元格时,直接对JSON传入的数字字段套用过滤器即可:
    <table>
      <tr>
        <td>{{ OrderAmount | EuroNumber }}</td>
      </tr>
    </table>
    
    传入值为40000.50时,渲染结果为40.000,50,完全匹配预期。如果需要调整小数位数,调用时传参即可,比如保留3位小数写作{{ OrderAmount | EuroNumber: 3 }}。

补充说明

  • Dot Liquid内置的money过滤器默认绑定美元格式规则,且要求传入值为特定的金额对象类型,JSON反序列化得到的普通数字、字符串类型无法触发正确格式化逻辑,不适合当前场景。
  • 如果需要调整为其他区域的数字格式,只需替换CultureInfo的初始化参数即可,比如中式千分位格式(逗号做千分位、点做小数位)替换为new CultureInfo("zh-CN")。
  • 上述过滤器代码无额外依赖,兼容Dot Liquid 2.0及以上所有版本,可以直接拷贝到项目中复用。

内容的提问来源于stack exchange,提问作者Tasos G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:18:30