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