aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-11-10 13:27:11 +0100
committerAnhgelus Morhtuuzh <william@herges.fr>2025-11-10 13:27:11 +0100
commit037094a928653ed27f1f9d5497f637af1c5380e0 (patch)
tree477930f59cbf2db32705f16a1af779e0563c6080
parent96299cbf09bdb75e4d6c6849c9c4c3ce000a6fc5 (diff)
fix(parser): not parsing right number with 0 after dot
-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)