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

如何对数字同时应用intcomma和ordinal两种人性化处理规则

实现数字同时应用intcomma和ordinal两种人性化格式规则的方法

intcomma的作用是为数字添加千位分隔符,ordinal的作用是为数字添加序数后缀(st/nd/rd/th),要同时应用两种规则,核心是优先保留纯数值计算后缀,再对数字本体做千位分隔处理,两种常用实现方案如下:

方案1:在Django框架中使用(intcomma和ordinal默认来自django.contrib.humanize包)

  • 第一步:确保你已经在项目settings.py的INSTALLED_APPS中注册了django.contrib.humanize
  • 第二步:自定义组合过滤器(避免直接拼接切片出错)
    在对应app的templatetags目录下新建custom_filters.py,写入以下代码:
from django import template
from django.contrib.humanize.templatetags.humanize import intcomma, ordinal

register = template.Library()

@register.filter
def intcomma_ordinal(num):
    num_value = int(num)
    # 单独取ordinal返回结果的最后两位作为后缀,避免数字位数影响切片
    return f"{intcomma(num_value)}{ordinal(num_value)[-2:]}"
  • 第三步:模板中调用
    首先在模板顶部加载过滤器:{% load custom_filters %}
    直接对数字使用过滤器即可:{{ 1000|intcomma_ordinal }},输出结果为1,000th

方案2:纯Python原生实现,不依赖框架

自己实现两个功能的逻辑,再组合调用即可:

def add_intcomma(num: int) -> str:
    # 实现千位分隔符逻辑
    return f"{num:,}"

def get_ordinal_suffix(num: int) -> str:
    # 实现序数后缀逻辑
    if 11 <= num % 100 <= 13:
        return "th"
    suffix_map = {1: "st", 2: "nd", 3: "rd"}
    return suffix_map.get(num % 10, "th")

def format_humanize_number(num: int) -> str:
    return f"{add_intcomma(num)}{get_ordinal_suffix(num)}"

# 测试用例
print(format_humanize_number(1000)) # 输出 1,000th
print(format_humanize_number(1002)) # 输出 1,002nd
print(format_humanize_number(23)) # 输出 23rd

注:你问题描述中的1,000nd属于笔误,1000的序数后缀为th,1002才会得到nd后缀的结果。

内容的提问来源于stack exchange,提问作者Baz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:18:04