# Module DA.BigNumeric¶

This module exposes operations for working with the `BigNumeric` type.

## Functions¶

scale

Calculate the scale of a `BigNumeric` number. The `BigNumeric` number is represented as `n * 10^-s` where `n` is an integer with no trailing zeros, and `s` is the scale.

Thus, the scale represents the number of nonzero digits after the decimal point. Note that the scale can be negative if the `BigNumeric` represents an integer with trailing zeros. In that case, it represents the number of trailing zeros (negated).

The scale ranges between 2^15 and -2^15 + 1. The scale of `0` is `0` by convention.

```>>> scale 1.1
1
```
```>>> scale (shiftLeft (2^14) 1.0)
-2^14
```
precision

Calculate the precision of a `BigNumeric` number. The `BigNumeric` number is represented as `n * 10^-s` where `n` is an integer with no trailing zeros, and `s` is the scale. The precision is the number of digits in `n`.

Thus, the precision represents the number of significant digits in the `BigNumeric`.

The precision ranges between 0 and 2^16 - 1.

```>>> precision 1.10
2
```
div

Calculate a division of `BigNumeric` numbers. The value of `div n r a b` is the division of `a` by `b`, rounded to `n` decimal places (i.e. scale), according to the rounding mode `r`.

This will fail when dividing by `0`, and when using the `RoundingUnnecessary` mode for a number that cannot be represented exactly with at most `n` decimal places.

round

Round a `BigNumeric` number. The value of `round n r a` is the value of `a` rounded to `n` decimal places (i.e. scale), according to the rounding mode `r`.

This will fail when using the `RoundingUnnecessary` mode for a number that cannot be represented exactly with at most `n` decimal places.

shiftRight

Shift a `BigNumeric` number to the right by a power of 10. The value `shiftRight n a` is the value of `a` times `10^(-n)`.

This will fail if the resulting `BigNumeric` is out of bounds.

```>>> shiftRight 2 32.0
0.32
```
shiftLeft

Shift a `BigNumeric` number to the left by a power of 10. The value `shiftLeft n a` is the value of `a` times `10^n`.

This will fail if the resulting `BigNumeric` is out of bounds.

```>>> shiftLeft 2 32.0
3200.0
```
roundToNumeric

Round a `BigNumeric` and cast it to a `Numeric`. This function uses the scale of the resulting numeric to determine the scale of the rounding.

This will fail when using the `RoundingUnnecessary` mode if the `BigNumeric` cannot be represented exactly in the requested `Numeric n`.

```>>> (roundToNumeric RoundingHalfUp 1.23456789 : Numeric 5)
1.23457
```