如何在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
相关产品推荐
相关产品推荐

