Packages

phoenix_kit

1.6.13
1.7.207 1.7.206 1.7.205 1.7.204 1.7.203 1.7.202 1.7.201 1.7.200 1.7.199 1.7.198 1.7.197 1.7.196 1.7.194 1.7.193 1.7.192 1.7.191 1.7.190 1.7.189 1.7.187 1.7.186 1.7.185 1.7.184 1.7.183 1.7.182 1.7.181 1.7.180 1.7.179 1.7.178 1.7.177 1.7.176 1.7.175 1.7.174 1.7.173 1.7.172 1.7.171 1.7.170 1.7.169 1.7.168 1.7.167 1.7.166 1.7.165 1.7.164 1.7.162 1.7.161 1.7.160 1.7.159 1.7.157 1.7.156 1.7.155 1.7.154 1.7.153 1.7.152 1.7.151 1.7.150 1.7.149 1.7.146 1.7.145 1.7.144 1.7.143 1.7.138 1.7.133 1.7.132 1.7.131 1.7.130 1.7.128 1.7.126 1.7.125 1.7.121 1.7.120 1.7.119 1.7.118 1.7.117 1.7.116 1.7.115 1.7.114 1.7.113 1.7.112 1.7.111 1.7.110 1.7.109 1.7.108 1.7.107 1.7.106 1.7.105 1.7.104 1.7.103 1.7.102 1.7.101 1.7.100 1.7.99 1.7.98 1.7.97 1.7.96 1.7.95 1.7.94 1.7.93 1.7.92 1.7.91 1.7.90 1.7.89 1.7.88 1.7.87 1.7.86 1.7.85 1.7.84 1.7.83 1.7.82 1.7.81 1.7.80 1.7.79 1.7.78 1.7.77 1.7.76 1.7.75 1.7.74 1.7.71 1.7.70 1.7.69 1.7.66 1.7.65 1.7.64 1.7.63 1.7.62 1.7.61 1.7.59 1.7.58 1.7.57 1.7.56 1.7.55 1.7.54 1.7.53 1.7.52 1.7.51 1.7.49 1.7.44 1.7.43 1.7.42 1.7.41 1.7.39 1.7.38 1.7.37 1.7.36 1.7.34 1.7.33 1.7.31 1.7.30 1.7.29 1.7.28 1.7.27 1.7.26 1.7.25 1.7.24 1.7.23 1.7.22 1.7.21 1.7.20 1.7.19 1.7.18 1.7.17 1.7.16 1.7.15 1.7.14 1.7.13 1.7.12 1.7.11 1.7.10 1.7.9 1.7.8 1.7.7 1.7.6 1.7.5 1.7.4 1.7.3 1.7.2 1.7.1 1.7.0 1.6.20 1.6.19 1.6.18 1.6.17 1.6.16 1.6.15 1.6.14 1.6.13 1.6.12 1.6.11 1.6.10 1.6.9 1.6.8 1.6.7 1.6.6 1.6.5 1.6.4 1.6.3 1.5.2 1.5.1 1.5.0 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.2 1.3.1 1.3.0 1.2.10 1.2.9 1.2.8 1.2.7 1.2.5 1.2.4 1.2.2 1.2.1 1.2.0 1.1.0 1.0.0

A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more

Current section

Files

Jump to
phoenix_kit lib phoenix_kit utils number.ex
Raw

lib/phoenix_kit/utils/number.ex

defmodule PhoenixKit.Utils.Number do
@moduledoc """
Number formatting utilities for PhoenixKit.
Provides functions for formatting numbers with thousand separators,
abbreviations, and other common number formatting needs.
"""
@doc """
Formats a number with thousand separators.
## Examples
iex> PhoenixKit.Utils.Number.format(1234567)
"1,234,567"
iex> PhoenixKit.Utils.Number.format(0)
"0"
iex> PhoenixKit.Utils.Number.format(nil)
"0"
"""
@spec format(integer() | nil) :: String.t()
def format(number) when is_integer(number) do
number
|> to_string()
|> String.graphemes()
|> Enum.reverse()
|> Enum.chunk_every(3)
|> Enum.map(&Enum.reverse/1)
|> Enum.reverse()
|> Enum.map_join(",", &Enum.join/1)
end
def format(_number), do: "0"
@doc """
Formats a number with abbreviations (K, M, B).
## Examples
iex> PhoenixKit.Utils.Number.format_short(1_234_567)
"1.2M"
iex> PhoenixKit.Utils.Number.format_short(5_432)
"5.4K"
iex> PhoenixKit.Utils.Number.format_short(123)
"123"
"""
@spec format_short(integer() | nil) :: String.t()
def format_short(number) when is_integer(number) do
cond do
number >= 1_000_000_000 ->
"#{Float.round(number / 1_000_000_000, 1)}B"
number >= 1_000_000 ->
"#{Float.round(number / 1_000_000, 1)}M"
number >= 1_000 ->
"#{Float.round(number / 1_000, 1)}K"
true ->
to_string(number)
end
end
def format_short(_number), do: "0"
@doc """
Formats a number as a percentage.
## Examples
iex> PhoenixKit.Utils.Number.format_percentage(95.5)
"95.5%"
iex> PhoenixKit.Utils.Number.format_percentage(100)
"100%"
iex> PhoenixKit.Utils.Number.format_percentage(nil)
"0%"
"""
@spec format_percentage(float() | integer() | nil) :: String.t()
def format_percentage(rate) when is_float(rate) do
"#{:erlang.float_to_binary(rate, decimals: 1)}%"
end
def format_percentage(rate) when is_integer(rate) do
"#{rate}%"
end
def format_percentage(_), do: "0%"
end