defmodule Exoddic.Converter.Uk do
@behaviour Exoddic.Converter
@moduledoc """
.uk-style traditional odds
"""
def from_prob(amount) when amount == 0, do: 0.0
def from_prob(amount) when amount != 0, do: 1 / amount - 1
def to_prob(amount) when amount == 0, do: 0.0
def to_prob(amount) when amount != 0, do: 1 / (amount + 1)
@doc "Formatted as the nearest integer ratio with a denominator not larger than 1000"
def for_display(amount) do
biggest = 1000
num = round(amount * biggest)
denom = gcd(num, biggest)
"#{:erlang.float_to_binary(num / denom, decimals: 0)}/#{
:erlang.float_to_binary(biggest / denom, decimals: 0)
}"
end
defp gcd(a, 0), do: a
defp gcd(a, b), do: gcd(b, rem(a, b))
end