如何对数字同时应用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
相关产品推荐
相关产品推荐

