Tie

Enum Tie 

Source
pub enum Tie {
    Up,
    Down,
    TowardZero,
    AwayFromZero,
    TowardEven,
    TowardOdd,
}
Expand description

How to handle a value that is exactly half, e.g. 5.round_to(10, ...).

Variants§

§

Up

Round half up (what most people consider correct).

use roundable::{Roundable, Tie};

assert!(10 == 5.round_to(10, Tie::Up));
assert!(0 == (-5).round_to(10, Tie::Up));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::Up));
assert!(10 == 6.round_to(10, Tie::Up));
assert!(0 == (-4).round_to(10, Tie::Up));
assert!(-10 == (-6).round_to(10, Tie::Up));
§

Down

Round half down.

use roundable::{Roundable, Tie};

assert!(0 == 5.round_to(10, Tie::Down));
assert!(-10 == (-5).round_to(10, Tie::Down));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::Down));
assert!(10 == 6.round_to(10, Tie::Down));
assert!(0 == (-4).round_to(10, Tie::Down));
assert!(-10 == (-6).round_to(10, Tie::Down));
§

TowardZero

Round half toward zero.

use roundable::{Roundable, Tie};

assert!(0 == 5.round_to(10, Tie::TowardZero));
assert!(0 == (-5).round_to(10, Tie::TowardZero));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::TowardZero));
assert!(10 == 6.round_to(10, Tie::TowardZero));
assert!(0 == (-4).round_to(10, Tie::TowardZero));
assert!(-10 == (-6).round_to(10, Tie::TowardZero));
§

AwayFromZero

Round half away from zero.

use roundable::{Roundable, Tie};

assert!(10 == 5.round_to(10, Tie::AwayFromZero));
assert!(-10 == (-5).round_to(10, Tie::AwayFromZero));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::AwayFromZero));
assert!(10 == 6.round_to(10, Tie::AwayFromZero));
assert!(0 == (-4).round_to(10, Tie::AwayFromZero));
assert!(-10 == (-6).round_to(10, Tie::AwayFromZero));
§

TowardEven

Round half toward even.

“Even” has a special meaning here since we only care about round values. If we are rounding to the nearest 10, then 0 is even, 10 is odd, 20 is even, and so on.

If we are rounding to whole numbers, then even and odd have the conventional meaning.

In general, a multiple of factor n is even if (n / factor) % 2 == 0.

§Examples
use roundable::{Roundable, Tie};

assert!(20 == 15.round_to(10, Tie::TowardEven));
assert!(0 == 5.round_to(10, Tie::TowardEven));
assert!(0 == (-5).round_to(10, Tie::TowardEven));
assert!(-20 == (-15).round_to(10, Tie::TowardEven));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::TowardEven));
assert!(10 == 6.round_to(10, Tie::TowardEven));
assert!(0 == (-4).round_to(10, Tie::TowardEven));
assert!(-10 == (-6).round_to(10, Tie::TowardEven));
§

TowardOdd

Round half toward odd.

“Odd” has a special meaning here since we only care about round values. If we are rounding to the nearest 10, then 0 is even, 10 is odd, 20 is even, and so on.

If we are rounding to whole numbers, then even and odd have the conventional meaning.

In general, a multiple of factor n is odd if (n / factor) % 2 != 0.

§Examples
use roundable::{Roundable, Tie};

assert!(10 == 15.round_to(10, Tie::TowardOdd));
assert!(10 == 5.round_to(10, Tie::TowardOdd));
assert!(-10 == (-5).round_to(10, Tie::TowardOdd));
assert!(-10 == (-15).round_to(10, Tie::TowardOdd));

// Other values are unaffected:
assert!(0 == 4.round_to(10, Tie::TowardOdd));
assert!(10 == 6.round_to(10, Tie::TowardOdd));
assert!(0 == (-4).round_to(10, Tie::TowardOdd));
assert!(-10 == (-6).round_to(10, Tie::TowardOdd));

Trait Implementations§

Source§

impl Clone for Tie

Source§

fn clone(&self) -> Tie

Returns a duplicate 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 Tie

Source§

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

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

impl PartialEq for Tie

Source§

fn eq(&self, other: &Tie) -> 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 Tie

Source§

impl Eq for Tie

Source§

impl StructuralPartialEq for Tie

Auto Trait Implementations§

§

impl Freeze for Tie

§

impl RefUnwindSafe for Tie

§

impl Send for Tie

§

impl Sync for Tie

§

impl Unpin for Tie

§

impl UnwindSafe for Tie

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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, 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.