Packages
tai
0.0.25
0.0.75
0.0.74
0.0.73
0.0.72
0.0.71
0.0.70
0.0.69
0.0.68
0.0.67
0.0.66
0.0.65
0.0.64
0.0.63
0.0.62
0.0.61
0.0.60
0.0.59
0.0.58
0.0.57
0.0.56
0.0.55
0.0.54
0.0.53
0.0.52
0.0.51
0.0.50
0.0.49
0.0.48
0.0.47
0.0.46
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
A composable, real time, market data and trade execution toolkit
Current section
Files
Jump to
Current section
Files
lib/tai/utils/decimal.ex
defmodule Tai.Utils.Decimal do
@deprecated "Use Decimal.cast/1 instead."
@spec from(number | String.t() | Decimal.t()) :: Decimal.t()
def from(val) when is_float(val), do: Decimal.from_float(val)
def from(val), do: Decimal.new(val)
@spec round_up(Decimal.t(), Decimal.t()) :: Decimal.t()
def round_up(val, increment) do
d = :math.pow(10, abs(val.exp) - abs(increment.exp))
v = ceil(val.coef / d)
r = rem(v, increment.coef)
z =
if r == 0 do
0
else
if val.sign > 0, do: increment.coef - r, else: -r
end
coef = v + z
Decimal.new(val.sign, coef, increment.exp)
end
@spec round_down(Decimal.t(), Decimal.t()) :: Decimal.t()
def round_down(val, increment) do
d = :math.pow(10, abs(val.exp) - abs(increment.exp))
v = trunc(val.coef / d)
r = rem(v, increment.coef)
z =
if r == 0 do
0
else
if val.sign > 0, do: -r, else: increment.coef - r
end
coef = v + z
Decimal.new(val.sign, coef, increment.exp)
end
end