Mam numer i trzeba dodać przyrostek: "st", "nd", "rd", "th". Na przykład: jeśli liczba wynosi 42, sufiksem jest "nd", 521 to "st", a 113 to "th" i tak dalej. Muszę to zrobić w Perlu. Wszelkie wskazówki.Jak pobrać numer porządkowy liczby całkowitej w Perlu (np. St, nd, rd, th)
Odpowiedz
Spróbuj tego:
my $ordinal;
if ($foo =~ /(?<!1)1$/) {
$ordinal = 'st';
} elsif ($foo =~ /(?<!1)2$/) {
$ordinal = 'nd';
} elsif ($foo =~ /(?<!1)3$/) {
$ordinal = 'rd';
} else {
$ordinal = 'th';
}
Korzystając Lingua::EN::Numbers::Ordinate. Z STRESZCZENIE:
use Lingua::EN::Numbers::Ordinate;
print ordinate(4), "\n";
# prints 4th
print ordinate(-342), "\n";
# prints -342nd
# Example of actual use:
...
for(my $i = 0; $i < @records; $i++) {
unless(is_valid($record[$i]) {
warn "The ", ordinate($i), " record is invalid!\n";
next;
}
...
}
Spróbuj krótkie podprogramu
use strict;
use warnings;
sub ordinal {
return $_.(qw/th st nd rd/)[/(?<!1)([123])$/ ? $1 : 0] for int shift;
}
for (42, 521, 113) {
print ordinal($_), "\n";
}
wyjście
42nd
521st
113th
Jest coś, czego nie rozumiem tutaj w pełni. Dlaczego pętla 'for', gdy występuje tylko jeden element jako argument? Może również działać 'return int (shift). (qw/... '. Dla wielu parametrów pętla' for' nie działałaby ani z powodu instrukcji 'return', działa dobrze, ale czy tęskniłem za czymś na temat pętli? – Birei
@Birei: po prostu sposób umieszczenia '$ _ [0]' na '$ _'. Twój sposób nie zadziałałby, ponieważ wyrażenie regularne potrzebuje wartości w' $ _' Jest to bardzo podobne do nowego 'danego' języka, ale ty nie można tego używać jako modyfikatora instrukcji, jak to możliwe z 'for' . – Borodin
Ah, ok. Dziękuję.Nie otrzymałem punktu' $ _' .Należy go ** + 1 **. – Birei
Oto rozwiązanie which I originally wrote for a code golf challenge, nieznacznie przepisywane w celu dostosowania do zwykłych najlepszych praktyk dla kodu non-golfa :
$number =~ s/(1?\d)$/$1 . ((qw'th st nd rd')[$1] || 'th')/e;
Sposób działania polega na tym, że wyrażenie regularne (1?\d)$
dopasowuje ostatnią cyfrę numeru plus poprzednią cyfrę, jeśli jest to 1
. Substytucja używa następnie dopasowanych cyfr jako indeksu do listy (qw'th st nd rd')
, odwzorowującej od 0 do th
, od 1 do st
, od 2 do nd
, od 3 do rd
i dowolnej innej wartości do undef. Wreszcie, operator ||
zastępuje undef z th
.
Jeśli nie podoba Ci się s///e
, w zasadzie można napisać to samo rozwiązanie np. tak:
for ($number) {
/(1?\d)$/ or next;
$_ .= (qw'th st nd rd')[$1] || 'th';
}
lub jako funkcja:
sub ordinal ($) {
$_[0] =~ /(1?\d)$/ or return;
return $_[0] . ((qw'th st nd rd')[$1] || 'th');
}
Innym rozwiązaniem (chociaż lubię istniejące wcześniej odpowiedzi, które są niezależne od zastosowania modułów lepiej):
use Date::Calc 'English_Ordinal';
print English_Ordinal $ARGV[0];
- 1. format datetime python z "st", "nd", "rd", "th" (angielski porządek porządkowy) jak PHP "S"
- 2. Formatowanie daty w systemie Unix w celu dołączenia sufiksu w dniu (st, nd, rd i th)
- 3. Jak dodawać zwykłe skróty Format daty w systemie iOS, np. "Th", "st"
- 4. Jak uzyskać numer porządkowy elementu
- 5. Thymeleaf th: inline = "javascript" numer
- 6. Jak uniknąć przepełnienia liczby całkowitej?
- 7. Zaokrąglanie liczby całkowitej do najbliższej wielokrotności innej liczby całkowitej
- 8. Dzielenie liczby całkowitej w Pythonie?
- 9. Wykrywanie przepełnienia liczby całkowitej
- 10. Wykrywanie przepełnienia liczby całkowitej
- 11. Korzystanie niesymetrycznego klamra w kodzie np Roxygen/Rd
- 12. C++ Sprawdzanie liczby całkowitej.
- 13. Jak zaokrąglić do liczby całkowitej w R?
- 14. Jak zaokrąglić liczbę do wybranej liczby całkowitej
- 15. Znaleźć długość ciągu liczby całkowitej w .NET
- 16. Vimdiff: wyświetlanie całkowitej liczby zmian
- 17. Runda do najbliższej liczby całkowitej
- 18. Kontrola przekroczenia liczby całkowitej SSE2
- 19. C tylko znak liczby całkowitej
- 20. javascript - jak zaokrąglić do najbliższej liczby całkowitej
- 21. Jak mogę pobrać liczbę całkowitą z localstorage i przymusić do liczby całkowitej za pomocą clojurescript
- 22. Jak cofnąć sortowanie plasterka liczby całkowitej Go?
- 23. Matplotlib: Jak wymusić etykiety liczby całkowitej?
- 24. Konwersja daty do liczby całkowitej w Javie
- 25. podwójna konwersja do liczby całkowitej w java
- 26. Łączy ciąg do liczby całkowitej w SML
- 27. Odnajdywanie liczby całkowitej w liczbach całkowitych
- 28. konwersja liczby całkowitej na listę w pythonie
- 29. Bezpieczny sposób konwertowania liczby całkowitej w enum
- 30. Konwersja wykładniczej do liczby całkowitej w PHP
upvote do użytku produkcyjnego nieuchwytnego, negatywnego zdania o zerowej szerokości. Chociaż (niestety) jak wskazuje Bill Ruppert, istnieje już moduł CPAN. –
Chociaż * jest * rozwiązaniem CPAN, to też mi się podoba. Jest dobrze przemyślany, czytelny, pozbawiony zależności i tak dokładny jak rozwiązanie CPAN dla dowolnej liczby całkowitej. – DavidO