Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

decimal

std › decimal

Exact non-integer numbers, for compile-time math: Decimal, a value scaled by a power of ten, and Fraction, a numerator over a denominator. Both convert to and from int with as.

from std.decimal import *

macro show(value: int) {
    @emit value
}

const half = Fraction(n = 1, d = 2)
const d = fraction_to_decimal(half, 3)
show d.value
show d.scale
show Decimal(value = 42, scale = 0) as int
500 3 42

Macros

decimal_to_int

x as an int. x.scale must be 0.

SyntaxParametersResultDescription
decimal_to_int(x)x: Decimalreturns int

decimal_from_int

x as a Decimal with scale 0.

SyntaxParametersResultDescription
decimal_from_int(x)x: intreturns Decimal

fraction_to_int

x as an int. x.d must be 1.

SyntaxParametersResultDescription
fraction_to_int(x)x: Fractionreturns int

fraction_from_int

x over 1.

SyntaxParametersResultDescription
fraction_from_int(x)x: intreturns Fraction

decimal_to_fraction

x as x.value over 10^x.scale, not reduced.

SyntaxParametersResultDescription
decimal_to_fraction(x)x: Decimalreturns Fraction

fraction_to_decimal

x as a Decimal with precision decimal places, rounded toward zero.

SyntaxParametersResultDescription
fraction_to_decimal(x, precision)x: Fraction, precision: intreturns Decimal

Types

Infinity

enum Infinity

A signed infinity.

VariantPayloadDescription
PositivePositive infinity.
NegativeNegative infinity.

Decimal

struct Decimal

value / 10^scale: Decimal(value = 314, scale = 2) is 3.14. scale can’t be negative. as int works when scale is 0.

FieldTypeDescription
valueintThe digits, as an integer.
scaleintHow many of those digits come after the decimal point.

Fraction

struct Fraction

n / d, where d isn’t 0. as int works when d is 1, and as Decimal keeps 10 decimal places.

FieldTypeDescription
nintThe numerator.
dintThe denominator.