# ExKcal.Calc (ExKcal v0.0.6)

Provides functions to handle some of the operations related to weight manipulation on the `ExKcal.Product`s.

# Link to this section Summary

## Types

Known SI prefixes.

Volume of substance and unit it is represented in.

Weight of substance and unit it is represented in.

## Functions

Converts ExKcal.Units.weight() and ExKcal.Units.volume() type values to target prefix.

# si_prefix()

## Specs

```si_prefix() ::
:Y
| :Z
| :E
| :P
| :T
| :G
| :M
| :k
| :h
| :da
| :d
| :c
| :m
| :μ
| :n
| :p
| :f
| :a
| :z
| :y```

Known SI prefixes.

# volume()

## Specs

`volume() :: {float(), :l | :dl | :ml} | {nil, :none}`

Volume of substance and unit it is represented in.

# weight()

## Specs

`weight() :: {float(), :kg | :g | :mg | :μg} | {nil, :none}`

Weight of substance and unit it is represented in.

# convert_si_prefix(arg, unit_to)

## Specs

`convert_si_prefix(weight() | volume(), atom()) :: weight() | volume()`

Converts ExKcal.Units.weight() and ExKcal.Units.volume() type values to target prefix.

## Notes

Quirkiness of that function is already suggested by its name:

• it converts from prefix to prefix, not really from unit to unit. This means that only prefix is taken into account during the conversion. Because of that, conversion between volume and weight units will go through (see examples).

## Examples

``````iex> import ExKcal.Calc
iex> convert_si_prefix({0.1, :mg}, :dl)
{0.001, :dl}
iex> convert_si_prefix({1002.0, :g}, :kg)
{1.002, :kg}
iex> convert_si_prefix({0.23, :dag}, :mg)
{2.3e3, :mg}``````