diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-11-10 13:27:11 +0100 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-11-10 13:27:11 +0100 |
| commit | 037094a928653ed27f1f9d5497f637af1c5380e0 (patch) | |
| tree | 477930f59cbf2db32705f16a1af779e0563c6080 /lib | |
| parent | 96299cbf09bdb75e4d6c6849c9c4c3ce000a6fc5 (diff) | |
fix(parser): not parsing right number with 0 after dot
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/math/conversion.ex | 3 | ||||
| -rw-r--r-- | lib/math/rational.ex | 8 |
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) |
