CheckedSub

Trait CheckedSub 

Source
pub trait CheckedSub<Rhs = Self> {
    type Output;
    type Error;

    // Required method
    fn csub(self, rhs: Rhs) -> Result<Self::Output, Self::Error>;

    // Provided method
    fn saturating_sub(self, rhs: Rhs) -> Self::Output
       where Self: Sized,
             Rhs: PartialOrd + Zero,
             Self::Output: Bounded { ... }
}
Expand description

Checked subtraction.

Required Associated Types§

Source

type Output

Result of subtraction.

Source

type Error

Usually ArithmeticError.

Required Methods§

Source

fn csub(self, rhs: Rhs) -> Result<Self::Output, Self::Error>

Checked subtraction. Returns Err on overflow.

use fixnum::{FixedPoint, typenum::U9, ops::CheckedSub};

type Amount = FixedPoint<i64, U9>;

let a: Amount = "0.3".parse()?;
let b: Amount = "0.1".parse()?;
let c: Amount = "0.2".parse()?;
assert_eq!(a.csub(b)?, c);

Provided Methods§

Source

fn saturating_sub(self, rhs: Rhs) -> Self::Output
where Self: Sized, Rhs: PartialOrd + Zero, Self::Output: Bounded,

Saturating subtraction. Computes self - rhs, saturating at the numeric bounds (MIN, MAX) instead of overflowing.

use fixnum::{FixedPoint, typenum::U9, ops::{Bounded, RoundMode::*, CheckedSub}};

type Amount = FixedPoint<i64, U9>;

let a: Amount = "9222001000.00002".parse()?;
let b: Amount = "9222000000".parse()?;
let c: Amount = "1000.00002".parse()?;
// 9222001000.00002 - 9222000000 = 1000.00002
assert_eq!(a.saturating_sub(b), c);

let d: Amount = "-9222000000".parse()?;
// 9222000000 - (-9222000000) = MAX
assert_eq!(b.saturating_sub(d), Amount::MAX);

// -9222000000 - 9222000000 = MIN
assert_eq!(d.saturating_sub(b), Amount::MIN);

Implementations on Foreign Types§

Source§

impl CheckedSub for i8

Source§

type Output = i8

Source§

type Error = ArithmeticError

Source§

fn csub(self, rhs: Self) -> Result<Self::Output, Self::Error>

Source§

fn saturating_sub(self, rhs: Self) -> Self::Output

Source§

impl CheckedSub for i16

Source§

type Output = i16

Source§

type Error = ArithmeticError

Source§

fn csub(self, rhs: Self) -> Result<Self::Output, Self::Error>

Source§

fn saturating_sub(self, rhs: Self) -> Self::Output

Source§

impl CheckedSub for i32

Source§

type Output = i32

Source§

type Error = ArithmeticError

Source§

fn csub(self, rhs: Self) -> Result<Self::Output, Self::Error>

Source§

fn saturating_sub(self, rhs: Self) -> Self::Output

Source§

impl CheckedSub for i64

Source§

type Output = i64

Source§

type Error = ArithmeticError

Source§

fn csub(self, rhs: Self) -> Result<Self::Output, Self::Error>

Source§

fn saturating_sub(self, rhs: Self) -> Self::Output

Source§

impl CheckedSub for i128

Source§

type Output = i128

Source§

type Error = ArithmeticError

Source§

fn csub(self, rhs: Self) -> Result<Self::Output, Self::Error>

Source§

fn saturating_sub(self, rhs: Self) -> Self::Output

Implementors§

Source§

impl<P: Precision> CheckedSub for FixedPoint<i16, P>

Available on crate feature i16 only.
Source§

impl<P: Precision> CheckedSub for FixedPoint<i32, P>

Available on crate feature i32 only.
Source§

impl<P: Precision> CheckedSub for FixedPoint<i64, P>

Available on crate feature i64 only.
Source§

impl<P: Precision> CheckedSub for FixedPoint<i128, P>

Available on crate feature i128 only.