Enum fixed_decimal::RoundingIncrement

source ·
#[non_exhaustive]
pub enum RoundingIncrement { MultiplesOf1, MultiplesOf2, MultiplesOf5, MultiplesOf25, }
Expand description

Increment used in a rounding operation.

Forces a rounding operation to round to only multiples of the specified increment.

§Example

use fixed_decimal::{SignedFixedDecimal, RoundingIncrement, SignedRoundingMode, UnsignedRoundingMode};
use writeable::assert_writeable_eq;
let dec = SignedFixedDecimal::from_str("-7.266").unwrap();
let mode = SignedRoundingMode::Unsigned(UnsignedRoundingMode::Expand);
let increments = [
    // .266 normally expands to .27 when rounding on position -2...
    (RoundingIncrement::MultiplesOf1, "-7.27"),
    // ...however, when rounding to multiples of 2, .266 expands to .28, since the next multiple
    // of 2 bigger than the least significant digit of the rounded value (7) is 8.
    (RoundingIncrement::MultiplesOf2, "-7.28"),
    // .266 expands to .30, since the next multiple of 5 bigger than 7 is 10.
    (RoundingIncrement::MultiplesOf5, "-7.30"),
    // .266 expands to .50, since the next multiple of 25 bigger than 27 is 50.
    // Note how we compare against 27 instead of only 7, because the increment applies to
    // the two least significant digits of the rounded value instead of only the least
    // significant digit.
    (RoundingIncrement::MultiplesOf25, "-7.50"),
];

for (increment, expected) in increments {
    assert_writeable_eq!(
        dec.clone().rounded_with_mode_and_increment(
            -2,
            mode,
            increment
        ),
        expected
    );
}

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

MultiplesOf1

Round the least significant digit to any digit (0-9).

This is the default rounding increment for all the methods that don’t take a RoundingIncrement as an argument.

§

MultiplesOf2

Round the least significant digit to multiples of two (0, 2, 4, 6, 8).

§

MultiplesOf5

Round the least significant digit to multiples of five (0, 5).

§

MultiplesOf25

Round the two least significant digits to multiples of twenty-five (0, 25, 50, 75).

With this increment, the rounding position index will match the least significant digit of the multiple of 25; e.g. the number .264 expanded at position -2 using increments of 25 will give .50 as a result, since the next multiple of 25 bigger than 26 is 50.

Trait Implementations§

source§

impl Clone for RoundingIncrement

source§

fn clone(&self) -> RoundingIncrement

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for RoundingIncrement

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for RoundingIncrement

source§

fn default() -> RoundingIncrement

Returns the “default value” for a type. Read more
source§

impl PartialEq for RoundingIncrement

source§

fn eq(&self, other: &RoundingIncrement) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Copy for RoundingIncrement

source§

impl Eq for RoundingIncrement

source§

impl StructuralPartialEq for RoundingIncrement

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.