Qqwy
Ratio - rational numbers in Elixir
Ratio
Ratio is a library to work with rational numbers (also known as ‘fractions’) in Elixir.
A bit of history
Ratio has been around for a very long time. It was the first library I wrote when I started learning Elixir, with the first public release happening in March of 2016. (For Elixir v1.2. Oh, how the time flies!)
Throughout the years, my onlook on programming has changed a little, Elixir has changed a little, and the library changed to match.
From the start, Ratio allowed to use the <|> operator as shorthand notation to allow for a natural syntax like 1 <|> 2. Ratio also supported overloaded math operators, for the same reason.
This operator overloading was later moved to an ‘opt-in’ approach. Later, support was added to mix-and-match overloaded math operators for different kinds of number types, by extracting this functionality to the Numbers library.
Recently it came to my attention that <|> has been deprecated starting in Elixir v1.14.
And so, the library again had to slightly change.
Today
And this brings me to today. A release candidate for v4.0.0 of the library has been published to Hex.PM just now.
The important (backwards-incompatible) changes to v3.0.2 are:
- Remove infix operator
<|>as its usage is deprecated in Elixir v1.14. - Switch the
Inspectimplementation to use the formRatio.new(10, 20)instead of10 <|> 20. - Remove implementation of
String.Chars, as the old implementation was not in a (non-programmer) human-readable format.
You can still use <|> or <~> (which is not deprecated in Elixir v1.14 and should stay around for a long time yet to come), by writing
defdelegate numerator <~> denominator, to: Ratio, as: :new
in your module.
For instance, here is an example of if you want to use the full opt-in syntactic sugary goodness:
defmodule IDoAlotOfMathHere do
defdelegate numerator <~> denominator, to: Ratio, as: :new
use Numbers, overload_operators: true
def calculate(input) do
num = input <~> 2
result = num * 2 + (3 <~> 4) * 5.0
result / 2
end
end
iex> IDoAlotOfMathHere.calculate(42)
Ratio.new(183, 8)
Please try out the new release candidate of the library (by adding {:ratio, "4.0.0-rc.0"} to your deps), and let me know if you encounter any bugs or oddities!
~Marten / Qqwy
Most Liked
Qqwy
Release candidate 4.0.0-rc.1 has been released, which contains a fix for a regression where constructing a rational number from a decimal did not work.
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









