Packages

Ordinals for numbers, e.g. 1st, 2nd, 3rd

Current section

Files

Jump to
rank src rank.erl
Raw

src/rank.erl

-module(rank).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rank.gleam").
-export([suffix/1, ordinalise/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/rank.gleam", 14).
?DOC(
" Returns the ordinal suffix for a number.\n"
"\n"
" # Examples\n"
"\n"
" ```gleam\n"
" suffix(1) // -> \"st\"\n"
" suffix(2) // -> \"nd\"\n"
" suffix(3) // -> \"rd\"\n"
" suffix(4) // -> \"th\"\n"
" ```\n"
).
-spec suffix(integer()) -> binary().
suffix(Number) ->
Number@1 = gleam@int:absolute_value(Number),
Hundred = Number@1 rem 100,
case Number@1 rem 10 of
_ when ((Hundred =:= 11) orelse (Hundred =:= 12)) orelse (Hundred =:= 13) ->
<<"th"/utf8>>;
1 ->
<<"st"/utf8>>;
2 ->
<<"nd"/utf8>>;
3 ->
<<"rd"/utf8>>;
_ ->
<<"th"/utf8>>
end.
-file("src/rank.gleam", 37).
?DOC(
" Convert a number to its ordinal form.\n"
"\n"
" # Examples\n"
"\n"
" ```gleam\n"
" ordinalise(1) // -> \"1st\"\n"
" ordinalise(2) // -> \"2nd\"\n"
" ordinalise(3) // -> \"3rd\"\n"
" ordinalise(4) // -> \"4th\"\n"
" ```\n"
).
-spec ordinalise(integer()) -> binary().
ordinalise(Number) ->
<<(erlang:integer_to_binary(Number))/binary, (suffix(Number))/binary>>.