Flutter中序数的求法

1sbrub3j  于 2023-03-13  发布在  Flutter
关注(0)|答案(4)|浏览(91)

我试着从stack获得一些帮助,我可以通过这个Python code
我想知道如何将其转换为dart并使用它来获得序数

ordinal = lambda n: "%d%s" % (n,"tsnrhtdd"[(n//10%10!=1)*(n%10<4)*n%10::4])
06odsfpq

06odsfpq1#

试试这个

void main() {
   for(int i =1; i<=100;i++){
     print("$i${ordinal(i)}");
   }
}
String ordinal(int number) {
    if(!(number >= 1 && number <= 100)) {//here you change the range
      throw Exception('Invalid number');
    }

    if(number >= 11 && number <= 13) {
      return 'th';
    }

    switch(number % 10) {
      case 1: return 'st';
      case 2: return 'nd';
      case 3: return 'rd';
      default: return 'th';
    }
}

输出:第1第2第3第4第5第6第7第8第9第10 ...............

yyyllmsg

yyyllmsg2#

已接受答案的可重复版本。

main() {
  print(toOrdinal(3)); 
  // -> 3rd
  print(ordinalGenerator(end: 1000));
  // -> [1st, 2nd, 3rd, 4th,..., 1000th]
  print(ordinalGenerator(start: 7, end: 14));
  // -> [7th, 8th, 9th, 10th, 11st, 12nd, 13rd, 14th]
}

List ordinalGenerator({int start = 1,required int end}) {
  if (start < 1) throw Exception('Start Number Can\' be less than 1');
  if (start > end) throw Exception('Invalid Range');

  return List.generate(
    end - (start == 1 ? 0 : start - 1),
    (index) => toOrdinal(index + start),
  );
}

String toOrdinal(int number) {
  if (number < 0) throw Exception('Invalid Number');

  switch (number % 10) {
    case 1:
      return '${number}st';
    case 2:
      return '${number}nd';
    case 3:
      return '${number}rd';
    default:
      return '${number}th';
  }
}
c7rzv4ha

c7rzv4ha3#

使用扩展,下面的代码可以用于任何int类型。因为序数是基于数字的最后一位;这个int扩展获取整数值并将其转换为字符串。2接下来,它获取所述字符串的最后一个索引并使用它来确定序数。

extension NumberParsing on int {
  String toOrdinalString() {
    if ((this < 0)) {
      //here you change the range
      throw Exception('Invalid number: Number must be a positive number');
    }
    if (this == 0) {
      return '0';
    }

    String stringValue = toString();

    switch (stringValue[stringValue.length - 1]) {
      case '1':
        return stringValue + 'st';
      case '2':
        return stringValue + 'nd';
      case '3':
        return stringValue + 'rd';
      default:
        return stringValue + 'th';
    }
  }
}

// Usage:
int someIntValue = 25;
someIntValue.toOrdinalString();

//Output:
25th

// Generate Ordinals from 1 to 100
for(int i =1; i<=100;i++){
     print(i.toOrdinalString());
   }
omjgkv6w

omjgkv6w4#

我使用本机平台库为此制作了一个包。
https://pub.dev/packages/ordinal_formatter

final ordinalString = await OrdinalFormatter().format(2); 
// -> 2nd

final localisedOrdinalString = await OrdinalFormatter().format(2, 'en_US'); 
// -> 2nd

相关问题