aboutsummaryrefslogtreecommitdiff
path: root/lib/math/conversion.ex
blob: 65ddf8f41407c0f663529b09e04c07b172464ce7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
defmodule ElixirMathParser.Math.Conversion do
  alias ElixirMathParser.Math.Rational

  def literal_float_to_rational(value) do
    {int, dec} = Integer.parse(value)

    String.graphemes(dec)
    |> Enum.reduce(Rational.new(int), fn v, acc ->
      if v != "." do
        num = Rational.numerator(acc) * 10
        den = Rational.denominator(acc) * 10
        Rational.new(num + String.to_integer(v), den)
      else
        acc
      end
    end)
  end
end