[][src]Struct fraction::prelude::GenericDecimal

pub struct GenericDecimal<T, P>(_, _)
where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>
;

Decimal type implementation

T is the type for data P is the type for precision

Uses GenericFraction internally to represent the data. Precision is being used for representation purposes only. Calculations do not use precision, but comparison does.

Examples

use fraction::GenericDecimal;

type Decimal = GenericDecimal<u64, u8>;

let d1 = Decimal::from(12);
let d2 = Decimal::from(0.5);

let mul = d1 * d2;
let div = d1 / d2;
let add = d1 + d2;

assert_eq!(mul, 6.into());
assert_eq!(div, Decimal::from("24.00"));
assert_eq!(add, Decimal::from(12.5));

Methods

impl<T, P> GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

pub fn sign(&self) -> Option<Sign> where
    T: CheckedAdd + CheckedMul + CheckedSub
[src]

pub fn set_precision(self, precision: P) -> Self[src]

pub fn get_precision(&self) -> P[src]

pub fn calc_precision(self) -> Self where
    T: CheckedMul + DivAssign + MulAssign + SubAssign + ToPrimitive + GenericInteger,
    P: Bounded + CheckedAdd
[src]

pub fn nan() -> Self[src]

pub fn infinity() -> Self[src]

pub fn neg_infinity() -> Self[src]

pub fn neg_zero() -> Self[src]

pub fn min_positive_value() -> Self where
    T: Bounded,
    P: Bounded
[src]

pub fn is_nan(&self) -> bool[src]

pub fn is_infinite(&self) -> bool[src]

pub fn is_finite(&self) -> bool[src]

pub fn is_normal(&self) -> bool[src]

pub fn classify(&self) -> FpCategory[src]

pub fn floor(&self) -> Self[src]

pub fn ceil(&self) -> Self[src]

pub fn round(&self) -> Self[src]

pub fn trunc(&self) -> Self[src]

pub fn fract(&self) -> Self[src]

pub fn abs(&self) -> Self[src]

pub fn signum(&self) -> Self[src]

pub fn is_sign_positive(&self) -> bool[src]

pub fn is_sign_negative(&self) -> bool[src]

pub fn mul_add(&self, a: Self, b: Self) -> Self[src]

pub fn recip(&self) -> Self[src]

pub fn map(
    self,
    fun: impl FnOnce(GenericFraction<T>) -> GenericFraction<T>
) -> Self
[src]

pub fn map_mut(&mut self, fun: impl FnOnce(&mut GenericFraction<T>))[src]

pub fn map_ref(
    &self,
    fun: impl FnOnce(&GenericFraction<T>) -> GenericFraction<T>
) -> Self
[src]

pub fn apply_ref<R>(&self, fun: impl FnOnce(&GenericFraction<T>, P) -> R) -> R[src]

pub fn from_decimal_str(val: &str) -> Result<Self, ParseError> where
    T: CheckedAdd + CheckedMul + CheckedSub,
    P: From<u8> + CheckedAdd
[src]

pub fn from_fraction(fraction: GenericFraction<T>) -> Self where
    T: GenericInteger + ToPrimitive,
    P: Bounded + CheckedAdd
[src]

Convert from a GenericFraction

Automatically calculates precision, so for "bad" numbers may take a lot of CPU cycles, especially if precision represented by big types (e.g. usize)

Examples

use fraction::{Fraction, Decimal};

let from_fraction = Decimal::from_fraction(Fraction::new(1u64, 3u64));
let from_division = Decimal::from(1) / Decimal::from(3);

let d1 = Decimal::from(4) / from_fraction;
let d2 = Decimal::from(4) / from_division;

assert_eq!(d1, d2);
assert_eq!(d1, Decimal::from(12));

Trait Implementations

impl<'a, T, P> Add<&'a GenericDecimal<T, P>> for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger + Add,
    P: Copy + GenericInteger + Into<usize>,
    &'a T: Add<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the + operator.

impl<T, P> Add<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Add,
    P: Copy + GenericInteger + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the + operator.

impl<'a, T, P> AddAssign<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + Integer + AddAssign + AddAssign<&'a T>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> AddAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + AddAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Bounded for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Bounded,
    P: Copy + GenericInteger + Into<usize> + Bounded
[src]

impl<T, P> CheckedAdd for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> CheckedDiv for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> CheckedMul for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> CheckedSub for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T: Clone, P: Clone> Clone for GenericDecimal<T, P> where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> Copy for GenericDecimal<T, P> where
    T: Copy + Integer,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> Debug for GenericDecimal<T, P> where
    T: Clone + GenericInteger + From<u8> + ToPrimitive + Debug,
    P: Copy + Integer + Into<usize>, 
[src]

impl<'de, T, P> Deserialize<'de> for GenericDecimal<T, P> where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>,
    T: Deserialize<'de>,
    P: Deserialize<'de>, 
[src]

impl<T, P> Display for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + Integer + Into<usize>, 
[src]

impl<'a, T, P> Div<&'a GenericDecimal<T, P>> for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger + Div,
    P: Copy + GenericInteger + Into<usize>,
    &'a T: Div<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the / operator.

impl<T, P> Div<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Div,
    P: Copy + GenericInteger + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the / operator.

impl<'a, T, P> DivAssign<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + Integer + DivAssign + DivAssign<&'a T>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> DivAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Eq for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Eq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<'a, T, P> From<&'a str> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<T, P> From<BigInt> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<BigUint> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<f32> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<T, P> From<f64> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<T, P> From<i128> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<i16> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<i32> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<i64> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<i8> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<isize> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<u128> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<u16> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<u32> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<u64> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<u8> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<usize> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<S, T, P> FromInputValue<S> for GenericDecimal<T, P> where
    S: ScalarValue,
    &'a S: ScalarRefValue<'a>,
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<T, P> FromSql for GenericDecimal<T, P> where
    T: Clone + GenericInteger + From<u16>,
    P: Copy + GenericInteger + Into<usize> + Bounded + TryToConvertFrom<i16> + Display
[src]

impl<S, T, P> GraphQLType<S> for GenericDecimal<T, P> where
    S: ScalarValue,
    &'a S: ScalarRefValue<'a>,
    T: Clone + GenericInteger + From<u8> + Display,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

type Context = ()

The expected context type for this GraphQL type Read more

type TypeInfo = ()

Type that may carry additional schema information Read more

impl<T, P> Hash for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<'a, T, P> Mul<&'a GenericDecimal<T, P>> for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger + Mul,
    P: Copy + GenericInteger + Into<usize>,
    &'a T: Mul<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the * operator.

impl<T, P> Mul<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Mul,
    P: Copy + GenericInteger + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the * operator.

impl<'a, T, P> MulAssign<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + Integer + MulAssign + MulAssign<&'a T>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> MulAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Neg for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + Integer + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the - operator.

impl<'a, T, P> Neg for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + Integer + Into<usize>,
    &'a T: Neg<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the - operator.

impl<T, P> Num for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

type FromStrRadixErr = ParseError

impl<T, P> One for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<S, T, P> ParseScalarValue<S> for GenericDecimal<T, P> where
    S: ScalarValue,
    &'a S: ScalarRefValue<'a>,
    T: Clone + GenericInteger + From<u8> + Display,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<T, P> PartialEq<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> PartialOrd<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialOrd,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<'a, T, P> Product<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Product<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<'a, T, P> Rem<&'a GenericDecimal<T, P>> for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger + Rem,
    P: Copy + GenericInteger + Into<usize>,
    &'a T: Rem<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the % operator.

impl<T, P> Rem<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Rem,
    P: Copy + GenericInteger + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the % operator.

impl<'a, T, P> RemAssign<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + Integer + RemAssign + RemAssign<&'a T>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> RemAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + RemAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Serialize for GenericDecimal<T, P> where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>,
    T: Serialize,
    P: Serialize
[src]

impl<T, P> Signed for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Neg,
    P: Copy + GenericInteger + Into<usize> + From<u8>, 
[src]

impl<'a, T, P> Sub<&'a GenericDecimal<T, P>> for &'a GenericDecimal<T, P> where
    T: Clone + GenericInteger + Sub,
    P: Copy + GenericInteger + Into<usize>,
    &'a T: Sub<Output = T>, 
[src]

type Output = GenericDecimal<T, P>

The resulting type after applying the - operator.

impl<T, P> Sub<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + Sub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

type Output = Self

The resulting type after applying the - operator.

impl<'a, T, P> SubAssign<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + Integer + SubAssign + SubAssign<&'a T>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> SubAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<'a, T, P> Sum<&'a GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> Sum<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<S, T, P> ToInputValue<S> for GenericDecimal<T, P> where
    S: ScalarValue,
    &'a S: ScalarRefValue<'a>,
    T: Clone + GenericInteger + Display + From<u8>,
    P: Copy + Integer + Into<usize>, 
[src]

impl<T, P> ToPrimitive for GenericDecimal<T, P> where
    T: Clone + GenericInteger + ToPrimitive,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> ToSql for GenericDecimal<T, P> where
    T: Clone + GenericInteger + From<u8> + Debug,
    P: Copy + GenericInteger + Into<usize> + Debug
[src]

impl<T, F, P1, P2> TryToConvertFrom<GenericDecimal<F, P1>> for GenericDecimal<T, P2> where
    T: Copy + Integer + TryToConvertFrom<F>,
    F: Copy + Integer,
    P2: Copy + Integer + Into<usize> + TryToConvertFrom<P1>,
    P1: Copy + Integer + Into<usize>, 
[src]

impl<T, P> Zero for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + Zero
[src]

Auto Trait Implementations

impl<T, P> RefUnwindSafe for GenericDecimal<T, P> where
    P: RefUnwindSafe,
    T: RefUnwindSafe

impl<T, P> Send for GenericDecimal<T, P> where
    P: Send,
    T: Send

impl<T, P> Sync for GenericDecimal<T, P> where
    P: Sync,
    T: Sync

impl<T, P> Unpin for GenericDecimal<T, P> where
    P: Unpin,
    T: Unpin

impl<T, P> UnwindSafe for GenericDecimal<T, P> where
    P: UnwindSafe,
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<Q, K> Equivalent<K> for Q where
    K: Borrow<Q> + ?Sized,
    Q: Eq + ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> NumAssign for T where
    T: Num + NumAssignOps<T>, 
[src]

impl<T, Rhs> NumAssignOps<Rhs> for T where
    T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>, 
[src]

impl<T> NumAssignRef for T where
    T: NumAssign + for<'r> NumAssignOps<&'r T>, 
[src]

impl<T, Rhs, Output> NumOps<Rhs, Output> for T where
    T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.