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

如何在Flutter中用Dart实现纸质书写样式的序数词(4th、5th)字符串?

在Dart中生成序数词字符串(如4th、5th)的实现方案

序数词的生成遵循简单规则,但需注意11、12、13这三个特殊例外,以下是具体实现:

核心规则

  • 数字结尾为1(且不在11-13范围内):加st,如1st、21st
  • 数字结尾为2(且不在11-13范围内):加nd,如2nd、22nd
  • 数字结尾为3(且不在11-13范围内):加rd,如3rd、23rd
  • 其余所有情况(包括11、12、13):加th,如4th、11th、14th

Dart实现代码

String getOrdinal(int number) {
  // 处理非正整数,可根据需求调整返回逻辑
  if (number <= 0) {
    return number.toString();
  }
  
  final lastTwoDigits = number % 100;
  // 11、12、13特殊处理,统一加th
  if (lastTwoDigits >= 11 && lastTwoDigits <= 13) {
    return '${number}th';
  }
  
  final lastDigit = number % 10;
  switch (lastDigit) {
    case 1:
      return '${number}st';
    case 2:
      return '${number}nd';
    case 3:
      return '${number}rd';
    default:
      return '${number}th';
  }
}

// 测试用例
void main() {
  print(getOrdinal(1));   // 输出: 1st
  print(getOrdinal(2));   // 输出: 2nd
  print(getOrdinal(3));   // 输出: 3rd
  print(getOrdinal(4));   // 输出: 4th
  print(getOrdinal(11));  // 输出: 11th
  print(getOrdinal(12));  // 输出: 12th
  print(getOrdinal(13));  // 输出: 13th
  print(getOrdinal(21));  // 输出: 21st
  print(getOrdinal(100)); // 输出: 100th
  print(getOrdinal(123)); // 输出: 123rd
}

扩展说明

如果需要支持小数或更大范围的数字,可在函数开头添加类型转换或额外判断逻辑。比如处理小数时,可提取整数部分后再应用上述规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:55:20