aboutsummaryrefslogtreecommitdiff
path: root/lib/math
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 /lib/math
parent96299cbf09bdb75e4d6c6849c9c4c3ce000a6fc5 (diff)
fix(parser): not parsing right number with 0 after dot
Diffstat (limited to 'lib/math')
-rw-r--r--lib/math/conversion.ex3
-rw-r--r--lib/math/rational.ex8
2 files changed, 8 insertions, 3 deletions
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)