defmodule Stellar.TxBuild.Utils do
@moduledoc """
TxBuild utils functions.
"""
@type fraction :: {integer(), integer()}
@spec number_to_fraction(number :: number()) :: fraction()
def number_to_fraction(number) when is_integer(number), do: {number, 1}
def number_to_fraction(number) when is_float(number) do
precision = float_precision(number)
base = :math.pow(10, precision) |> trunc()
numerator = trunc(number * base)
denominator = 1 * base
gcd = Integer.gcd(numerator, denominator)
{div(numerator, gcd), div(denominator, gcd)}
end
@spec float_precision(number :: float()) :: integer()
defp float_precision(number) do
number
|> Float.to_string()
|> String.split(".")
|> List.last()
|> String.length()
end
end