fastnum 0.7.4

Fast decimal numbers library
Documentation
macro_rules! trunc {
    ($bits: literal $($sign: ident)?) => {
        doc::doc_comment! {
            $bits $($sign)?,

            "Truncates the decimal number to integral with no fractional portion.\n"
            "This is a true truncation whereby no rounding is performed."
            "This operation is equivalent to [Self::rescale] or [Self::trunc_with_scale] with `scale` set to `0`.\n"

            "# Performance\n\n"
            "This operation is typically much faster than [Self::rescale]",

            #Panics
            doc::decimal_operation_panics!("truncate operation"),

            #Also
            "More about [`truncate`](crate#truncate) decimals."
            "[Self::trunc_with_scale]"
            "[Self::rescale]"
            "[Self::quantize]",

            #Examples
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141).trunc(), " doc::m!($bits $($sign)?) "(3));"]
            ["assert_eq!(" doc::m!($bits $($sign)?) "(2.9).trunc(), " doc::m!($bits $($sign)?) "(2));"]
            [$(@ {$sign})? "assert_eq!(" doc::m!($bits) "(-1.98765).trunc(), " doc::m!($bits) "(-1));"]
            [""]
            ["let ctx = decimal::Context::default().without_traps();"]
            [""]
            ["assert!(" doc::type_str!($bits $($sign)?) "::INFINITY.with_ctx(ctx).trunc().is_nan());"]
            [$(@ {$sign})? "assert!(" doc::type_str!($bits $($sign)?) "::NEG_INFINITY.with_ctx(ctx).trunc().is_nan());"]
            ["assert!(" doc::type_str!($bits $($sign)?) "::NAN.with_ctx(ctx).trunc().is_nan());"]
        }
    };
}

pub(crate) use trunc;

macro_rules! trunc_with_scale {
    ($bits: literal $($sign: ident)?) => {
        doc::doc_comment! {
            $bits $($sign)?,

            "Truncates the decimal number to the given number of digits after the decimal point.\n"
            "This is a true truncation whereby no rounding is performed."
            "This operation is equivalent to [Self::rescale].\n"

            "# Performance\n\n"
            "This operation is typically much faster than [Self::rescale]",

            #Panics
            doc::decimal_operation_panics!("truncate operation"),

            #Also
            "More about [`truncate`](crate#truncate) decimals."
            "[Self::trunc]"
            "[Self::rescale]"
            "[Self::quantize]",

            #Examples
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141592).trunc_with_scale(2), " doc::m!($bits $($sign)?) "(3.14));"]
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141592).trunc_with_scale(3), " doc::m!($bits $($sign)?) "(3.141));"]
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141592).trunc_with_scale(4), " doc::m!($bits $($sign)?) "(3.1415));"]
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141592).trunc_with_scale(5), " doc::m!($bits $($sign)?) "(3.14159));"]
            ["assert_eq!(" doc::m!($bits $($sign)?) "(3.141592).trunc_with_scale(6), " doc::m!($bits $($sign)?) "(3.141592));"]
            [$(@ {$sign})? "assert_eq!(" doc::m!($bits) "(-1.98765).trunc_with_scale(1), " doc::m!($bits) "(-1.9));"]
            [""]
            ["let ctx = decimal::Context::default().without_traps();"]
            [""]
            ["assert!(" doc::type_str!($bits $($sign)?) "::INFINITY.with_ctx(ctx).trunc_with_scale(1).is_nan());"]
            [$(@ {$sign})? "assert!(" doc::type_str!($bits $($sign)?) "::NEG_INFINITY.with_ctx(ctx).trunc_with_scale(1).is_nan());"]
            ["assert!(" doc::type_str!($bits $($sign)?) "::NAN.with_ctx(ctx).trunc_with_scale(1).is_nan());"]
        }
    };
}

pub(crate) use trunc_with_scale;