Current section

Files

Jump to
ex_cldr_units lib cldr conversion function_factors.ex
Raw

lib/cldr/conversion/function_factors.ex

defmodule Cldr.Unit.Conversion.FunctionFactors do
alias Cldr.Unit.Conversion.FunctionFactors
def factors do
%{
temperature: %{
celsius: 1,
fahrenheit: {
&FunctionFactors.to_fahrenheit/1,
&FunctionFactors.from_fahrenheit/1
},
generic: :not_convertible,
kelvin: {
&FunctionFactors.to_kelvin/1,
&FunctionFactors.from_kelvin/1
}
}
}
end
def to_fahrenheit(x) when is_number(x) do
(x - 32) / 1.8
end
def to_fahrenheit(%Decimal{} = x) do
Decimal.sub(x, Decimal.new(32))
|> Decimal.div(Decimal.new("1.8"))
end
def from_fahrenheit(x) when is_number(x) do
x * 1.8 + 32
end
def from_fahrenheit(%Decimal{} = x) do
Decimal.mult(x, Decimal.new("1.8"))
|> Decimal.add(Decimal.new(32))
end
def to_kelvin(x) when is_number(x) do
x - 273.15
end
def to_kelvin(%Decimal{} = x) do
Decimal.sub(x, Decimal.new("273.15"))
end
def from_kelvin(x) when is_number(x) do
x + 273.15
end
def from_kelvin(%Decimal{} = x) do
Decimal.add(x, Decimal.new("273.15"))
end
end