aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/input.txt2
-rw-r--r--lib/math/conversion.ex3
-rw-r--r--lib/math/rational.ex8
3 files changed, 9 insertions, 4 deletions
diff --git a/example/input.txt b/example/input.txt
index 909e250..9c49d56 100644
--- a/example/input.txt
+++ b/example/input.txt
@@ -1,4 +1,4 @@
-a = 10.5;; b = .5
+a = 10.05;; b = .95
(a + b) * 10 / 2
x = 2_0
diff --git a/lib/math/conversion.ex b/lib/math/conversion.ex
index 65ddf8f..3dd777e 100644
--- a/lib/math/conversion.ex
+++ b/lib/math/conversion.ex
@@ -9,10 +9,11 @@ defmodule ElixirMathParser.Math.Conversion do
if v != "." do
num = Rational.numerator(acc) * 10
den = Rational.denominator(acc) * 10
- Rational.new(num + String.to_integer(v), den)
+ Rational.newRaw(num + String.to_integer(v), den)
else
acc
end
end)
+ |> Rational.simplify()
end
end
diff --git a/lib/math/rational.ex b/lib/math/rational.ex
index 018f69b..c3d94c9 100644
--- a/lib/math/rational.ex
+++ b/lib/math/rational.ex
@@ -132,6 +132,10 @@ defmodule ElixirMathParser.Math.Rational do
div(numerator, %Rational{numerator: denominator, denominator: 1})
end
+ def newRaw(numerator, denominator) when is_integer(numerator) and is_integer(denominator) do
+ %Rational{numerator: numerator, denominator: denominator}
+ end
+
@doc """
Returns the absolute version of the given number (which might be an integer, float or Rational).
@@ -424,9 +428,9 @@ defmodule ElixirMathParser.Math.Rational do
# Simplifies the Rational to its most basic form.
# Which might result in an integer.
# Ensures that a `-` is only kept in the numerator.
- defp simplify(rational)
+ def simplify(rational)
- defp simplify(%Rational{numerator: numerator, denominator: denominator}) do
+ def simplify(%Rational{numerator: numerator, denominator: denominator}) do
gcdiv = gcd(numerator, denominator)
denominator = Kernel.div(denominator, gcdiv)