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
Current section
Files
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