aboutsummaryrefslogtreecommitdiff
path: root/lib/math/conversion.ex
blob: 3dd777e602388d537779e44a58a70f294c00905c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.newRaw(num + String.to_integer(v), den)
      else
        acc
      end
    end)
    |> Rational.simplify()
  end
end