# `Rujira.Math`
[🔗](https://github.com/RujiraNetwork/rujira_ex/blob/v0.0.1/lib/rujira/math.ex#L1)

Math utilities for Rujira financial calculations

# `avg`

```elixir
@spec avg(number() | Decimal.t(), number() | Decimal.t()) :: Decimal.t()
```

Average of two numbers

# `div_floor`

```elixir
@spec div_floor(number() | Decimal.t(), number() | Decimal.t()) :: integer()
```

Divide two numbers and round down to integer

# `floor`

```elixir
@spec floor(number() | Decimal.t()) :: integer()
```

Round down to integer using floor

# `mul_floor`

```elixir
@spec mul_floor(number() | Decimal.t(), number() | Decimal.t()) :: integer()
```

Multiply two numbers and round down to integer

# `normalize`

```elixir
@spec normalize(number() | float() | Decimal.t(), integer(), integer()) :: Decimal.t()
```

Convert number from one decimal precision to another

# `safe_div`

```elixir
@spec safe_div(number() | Decimal.t(), number() | Decimal.t()) :: Decimal.t()
```

Safe division that returns 0 if divisor is zero

# `to_decimal`

```elixir
@spec to_decimal(nil | integer() | float() | String.t() | Decimal.t()) ::
  {:ok, Decimal.t() | nil} | {:error, :invalid_decimal}
```

Parses any value to a Decimal. `nil` passes through.

Returns `{:ok, Decimal.t}`, `{:ok, nil}`, or `{:error, :invalid_decimal}`.

# `to_integer`

```elixir
@spec to_integer(nil | integer() | String.t()) ::
  {:ok, integer() | nil} | {:error, :invalid_integer}
```

Parses any value to an integer. `nil` passes through.

Returns `{:ok, integer}`, `{:ok, nil}`, or `{:error, :invalid_integer}`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
