[][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<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: Clone, P: Clone> Clone for GenericDecimal<T, P> where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>, 
[src]

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

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<u8> 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<u16> 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<u32> 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<u64> 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<u128> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<i128> 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<T, P> From<isize> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    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<BigUint> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize>, 
[src]

impl<T, P> From<BigInt> for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    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<T, P> Copy for GenericDecimal<T, P> where
    T: Copy + Integer,
    P: Copy + Integer + 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]

#[must_use]
fn lt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than (for self and other) and is used by the < operator. Read more

#[must_use]
fn le(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more

#[must_use]
fn gt(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than (for self and other) and is used by the > operator. Read more

#[must_use]
fn ge(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

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

#[must_use]
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]

This method tests for !=.

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

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

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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> AddAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + AddAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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> SubAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + SubAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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> MulAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + MulAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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> DivAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + DivAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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> RemAssign<GenericDecimal<T, P>> for GenericDecimal<T, P> where
    T: Clone + GenericInteger + DivAssign + SubAssign + MulAssign + RemAssign,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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> Hash for GenericDecimal<T, P> where
    T: Clone + GenericInteger + PartialEq,
    P: Copy + GenericInteger + Into<usize>, 
[src]

fn hash_slice<H>(data: &[Self], state: &mut H) where
    H: Hasher
1.3.0[src]

Feeds a slice of this type into the given [Hasher]. Read more

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

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> Zero for GenericDecimal<T, P> where
    T: Clone + GenericInteger,
    P: Copy + GenericInteger + Into<usize> + Zero
[src]

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

fn is_one(&self) -> bool where
    Self: PartialEq<Self>, 
[src]

Returns true if self is equal to the multiplicative identity. Read more

impl<T, P> CheckedMul for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub + CheckedMul,
    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> CheckedSub for GenericDecimal<T, P> where
    T: Clone + GenericInteger + CheckedAdd + CheckedDiv + CheckedMul + CheckedSub + CheckedSub,
    P: Copy + GenericInteger + Into<usize>, 
[src]

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

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

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

fn to_isize(&self) -> Option<isize>[src]

Converts the value of self to an isize.

fn to_i8(&self) -> Option<i8>[src]

Converts the value of self to an i8.

fn to_i16(&self) -> Option<i16>[src]

Converts the value of self to an i16.

fn to_i32(&self) -> Option<i32>[src]

Converts the value of self to an i32.

fn to_i128(&self) -> Option<i128>[src]

Converts the value of self to an i128. Read more

fn to_usize(&self) -> Option<usize>[src]

Converts the value of self to a usize.

fn to_u8(&self) -> Option<u8>[src]

Converts the value of self to an u8.

fn to_u16(&self) -> Option<u16>[src]

Converts the value of self to an u16.

fn to_u32(&self) -> Option<u32>[src]

Converts the value of self to an u32.

fn to_u128(&self) -> Option<u128>[src]

Converts the value of self to an u128. Read more

fn to_f32(&self) -> Option<f32>[src]

Converts the value of self to an f32.

impl<T, P> Serialize for GenericDecimal<T, P> where
    T: Clone + Integer,
    P: Copy + Integer + Into<usize>,
    T: Serialize,
    P: Serialize
[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<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<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<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<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

fn resolve_field(
    &self,
    info: &Self::TypeInfo,
    field_name: &str,
    arguments: &Arguments<S>,
    executor: &Executor<Self::Context, S>
) -> Result<Value<S>, FieldError<S>>
[src]

Resolve the value of a single field on this type. Read more

fn resolve_into_type(
    &self,
    info: &Self::TypeInfo,
    type_name: &str,
    selection_set: Option<&[Selection<S>]>,
    executor: &Executor<Self::Context, S>
) -> Result<Value<S>, FieldError<S>>
[src]

Resolve this interface or union into a concrete type Read more

fn concrete_type_name(
    &self,
    context: &Self::Context,
    info: &Self::TypeInfo
) -> String
[src]

Return the concrete type name for this instance/union. Read more

impl<T, P> ToSql for GenericDecimal<T, P> where
    T: Clone + GenericInteger + From<u8> + Debug,
    P: Copy + GenericInteger + Into<usize> + Debug
[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]

fn from_sql_null(
    ty: &Type
) -> Result<Self, Box<dyn Error + 'static + Send + Sync>>

Creates a new value of this type from a NULL SQL value. Read more

fn from_sql_nullable(
    ty: &Type,
    raw: Option<&[u8]>
) -> Result<Self, Box<dyn Error + 'static + Send + Sync>>

A convenience function that delegates to from_sql and from_sql_null depending on the value of raw. Read more

Auto Trait Implementations

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

Blanket Implementations

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

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

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

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

type Owned = T

The resulting type after obtaining ownership.

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.

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

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

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

impl<T> NumAssignRef for T where
    T: NumAssign + NumAssignOps<&'r 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, 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> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]

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

impl<T> Same<T> for T

type Output = T

Should always be Self