Struct sp_arithmetic::per_things::Perquintill
source · pub struct Perquintill(_);
Expand description
A fixed point representation of a number in the range [0, 1].
Parts per Quintillion
Implementations
sourceimpl Perquintill
impl Perquintill
sourcepub const fn from_parts(parts: u64) -> Self
pub const fn from_parts(parts: u64) -> Self
From an explicitly defined number of parts per maximum of the type.
sourcepub const fn from_percent(x: u64) -> Self
pub const fn from_percent(x: u64) -> Self
Converts a percent into Self
. Equal to x / 100
.
This can be created at compile time.
sourcepub const fn one() -> Self
pub const fn one() -> Self
See PerThing::one
sourcepub fn is_one(&self) -> bool
pub fn is_one(&self) -> bool
See PerThing::is_one
.
sourcepub const fn zero() -> Self
pub const fn zero() -> Self
See PerThing::zero
.
sourcepub fn is_zero(&self) -> bool
pub fn is_zero(&self) -> bool
See PerThing::is_zero
.
sourcepub const fn deconstruct(self) -> u64
pub const fn deconstruct(self) -> u64
sourcepub fn square(self) -> Self
pub fn square(self) -> Self
See PerThing::square
.
sourcepub fn from_float(x: f64) -> Self
pub fn from_float(x: f64) -> Self
See PerThing::from_float
.
sourcepub fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u64> + TryInto<u128>,
u64: Into<N>,
👎Deprecated: Use PerThing::from_rational
instead
pub fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u64> + TryInto<u128>,
u64: Into<N>,
PerThing::from_rational
insteadsourcepub fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u64> + TryInto<u128>,
u64: Into<N>,
pub fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<u64> + TryInto<u128>,
u64: Into<N>,
sourcepub fn int_mul(self, b: u64) -> Self
pub fn int_mul(self, b: u64) -> Self
Integer multiplication with another value, saturating at 1.
sourcepub fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
pub fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
See PerThing::mul_floor
.
sourcepub fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
pub fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
See PerThing::mul_ceil
.
sourcepub fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
pub fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
sourcepub fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
pub fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
sourcepub fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
pub fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<u64>,
u64: Into<N>,
sourcepub fn saturating_div(self, rhs: Self, r: Rounding) -> Self
pub fn saturating_div(self, rhs: Self, r: Rounding) -> Self
Saturating division. Compute self / rhs
, saturating at one if rhs < self
.
The rounding
method must be specified. e.g.:
let pc = |x| Percent::from_percent(x);
assert_eq!(
pc(2).saturating_div(pc(3), Down),
pc(66),
);
assert_eq!(
pc(1).saturating_div(pc(3), NearestPrefUp),
pc(33),
);
assert_eq!(
pc(2).saturating_div(pc(3), NearestPrefDown),
pc(67),
);
assert_eq!(
pc(1).saturating_div(pc(3), Up),
pc(34),
);
sourceimpl Perquintill
impl Perquintill
sourcepub const fn from_perthousand(x: u64) -> Self
pub const fn from_perthousand(x: u64) -> Self
Converts a percent into Self
. Equal to x / 1000
.
This can be created at compile time.
Trait Implementations
sourceimpl Add<Perquintill> for Perquintill
impl Add<Perquintill> for Perquintill
sourceimpl Bounded for Perquintill
impl Bounded for Perquintill
sourceimpl CheckedAdd for Perquintill
impl CheckedAdd for Perquintill
sourcefn checked_add(&self, rhs: &Self) -> Option<Self>
fn checked_add(&self, rhs: &Self) -> Option<Self>
None
is
returned. Read moresourceimpl CheckedMul for Perquintill
impl CheckedMul for Perquintill
Note
CheckedMul will never fail for PerThings.
sourcefn checked_mul(&self, rhs: &Self) -> Option<Self>
fn checked_mul(&self, rhs: &Self) -> Option<Self>
None
is returned. Read moresourceimpl CheckedSub for Perquintill
impl CheckedSub for Perquintill
sourcefn checked_sub(&self, v: &Self) -> Option<Self>
fn checked_sub(&self, v: &Self) -> Option<Self>
None
is returned. Read moresourceimpl Clone for Perquintill
impl Clone for Perquintill
sourcefn clone(&self) -> Perquintill
fn clone(&self) -> Perquintill
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl CompactAs for Perquintill
impl CompactAs for Perquintill
Implementation makes any compact encoding of PerThing::Inner
valid,
when decoding it will saturate up to PerThing::ACCURACY
.
sourceimpl Debug for Perquintill
impl Debug for Perquintill
sourceimpl Decode for Perquintill
impl Decode for Perquintill
sourcefn decode<I: Input>(input: &mut I) -> Result<Self, Error>
fn decode<I: Input>(input: &mut I) -> Result<Self, Error>
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn skip<I>(input: &mut I) -> Result<(), Error>where
I: Input,
fn encoded_fixed_size() -> Option<usize>
fn encoded_fixed_size() -> Option<usize>
sourceimpl Default for Perquintill
impl Default for Perquintill
sourceimpl<'de> Deserialize<'de> for Perquintill
impl<'de> Deserialize<'de> for Perquintill
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
sourceimpl<N> Div<N> for Perquintillwhere
u64: TryFrom<N>,
impl<N> Div<N> for Perquintillwhere
u64: TryFrom<N>,
sourceimpl Div<Perquintill> for Perquintill
impl Div<Perquintill> for Perquintill
sourceimpl Encode for Perquintill
impl Encode for Perquintill
sourcefn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
fn encode_to<__CodecOutputEdqy: Output + ?Sized>(
&self,
__codec_dest_edqy: &mut __CodecOutputEdqy
)
sourcefn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R
fn using_encoded<R, F: FnOnce(&[u8]) -> R>(&self, f: F) -> R
fn encoded_size(&self) -> usize
fn encoded_size(&self) -> usize
sourceimpl From<Compact<Perquintill>> for Perquintill
impl From<Compact<Perquintill>> for Perquintill
sourcefn from(x: Compact<Perquintill>) -> Perquintill
fn from(x: Compact<Perquintill>) -> Perquintill
sourceimpl MaxEncodedLen for Perquintill
impl MaxEncodedLen for Perquintill
sourcefn max_encoded_len() -> usize
fn max_encoded_len() -> usize
sourceimpl<N> Mul<N> for Perquintillwhere
N: Clone + UniqueSaturatedInto<u64> + Rem<N, Output = N> + Div<N, Output = N> + Mul<N, Output = N> + Add<N, Output = N> + Unsigned,
u64: Into<N>,
impl<N> Mul<N> for Perquintillwhere
N: Clone + UniqueSaturatedInto<u64> + Rem<N, Output = N> + Div<N, Output = N> + Mul<N, Output = N> + Add<N, Output = N> + Unsigned,
u64: Into<N>,
Non-overflow multiplication.
This is tailored to be used with a balance type.
sourceimpl Mul<Perquintill> for Perquintill
impl Mul<Perquintill> for Perquintill
sourceimpl One for Perquintill
impl One for Perquintill
sourceimpl Ord for Perquintill
impl Ord for Perquintill
sourcefn cmp(&self, other: &Perquintill) -> Ordering
fn cmp(&self, other: &Perquintill) -> Ordering
1.21.0 · sourcefn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 · sourcefn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
1.50.0 · sourcefn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: Sized + PartialOrd<Self>,
sourceimpl PartialEq<Perquintill> for Perquintill
impl PartialEq<Perquintill> for Perquintill
sourcefn eq(&self, other: &Perquintill) -> bool
fn eq(&self, other: &Perquintill) -> bool
sourceimpl PartialOrd<Perquintill> for Perquintill
impl PartialOrd<Perquintill> for Perquintill
sourcefn partial_cmp(&self, other: &Perquintill) -> Option<Ordering>
fn partial_cmp(&self, other: &Perquintill) -> Option<Ordering>
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresourceimpl PerThing for Perquintill
impl PerThing for Perquintill
sourcefn deconstruct(self) -> Self::Inner
fn deconstruct(self) -> Self::Inner
Consume self and return the number of parts per thing.
sourcefn from_parts(parts: Self::Inner) -> Self
fn from_parts(parts: Self::Inner) -> Self
Build this type from a number of parts per thing.
sourcefn from_float(x: f64) -> Self
fn from_float(x: f64) -> Self
NOTE: saturate to 0 or 1 if x is beyond [0, 1]
type Upper = u128
type Upper = u128
Self::Inner
, used to avoid overflow in some computations.
It must be able to compute ACCURACY^2
. Read moresourceconst ACCURACY: Self::Inner = {transmute(0x0de0b6b3a7640000): <per_things::Perquintill as per_things::PerThing>::Inner}
const ACCURACY: Self::Inner = {transmute(0x0de0b6b3a7640000): <per_things::Perquintill as per_things::PerThing>::Inner}
sourcefn from_rational_with_rounding<N>(p: N, q: N, r: Rounding) -> Result<Self, ()>where
N: Clone + Ord + TryInto<Self::Inner> + TryInto<Self::Upper> + Div<N, Output = N> + Rem<N, Output = N> + Add<N, Output = N> + AddAssign<N> + Unsigned + Zero + One,
Self::Inner: Into<N>,
fn from_rational_with_rounding<N>(p: N, q: N, r: Rounding) -> Result<Self, ()>where
N: Clone + Ord + TryInto<Self::Inner> + TryInto<Self::Upper> + Div<N, Output = N> + Rem<N, Output = N> + Add<N, Output = N> + AddAssign<N> + Unsigned + Zero + One,
Self::Inner: Into<N>,
p/q
into a per-thing fraction. Read moresourcefn less_epsilon(self) -> Self
fn less_epsilon(self) -> Self
self
or self
if it is already zero.sourcefn try_less_epsilon(self) -> Result<Self, Self>
fn try_less_epsilon(self) -> Result<Self, Self>
self
or an error with the same value if self
is already
zero. Read moresourcefn plus_epsilon(self) -> Self
fn plus_epsilon(self) -> Self
self
or self
if it is already one.sourcefn try_plus_epsilon(self) -> Result<Self, Self>
fn try_plus_epsilon(self) -> Result<Self, Self>
self
or an error with the same value if self
is already
one. Read moresourcefn from_percent(x: Self::Inner) -> Self
fn from_percent(x: Self::Inner) -> Self
Self::from_parts(x * Self::ACCURACY / 100)
but more accurate and can cope with potential type overflows. Read moresourcefn left_from_one(self) -> Self
fn left_from_one(self) -> Self
self
is saturating-subtracted from Self::one()
.sourcefn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn mul_floor<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
Mul
rounds to the
nearest whole number. Read moresourcefn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn mul_ceil<N>(self, b: N) -> Nwhere
N: MultiplyArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
Mul
rounds to the nearest whole number. Read moresourcefn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul_floor<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded down to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
fn saturating_reciprocal_mul_ceil<N>(self, b: N) -> Nwhere
N: ReciprocalArg + UniqueSaturatedInto<Self::Inner>,
Self::Inner: Into<N>,
self
. The result is rounded up to the
nearest whole number and saturates at the numeric bounds instead of overflowing. Read moresourcefn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
fn from_rational<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
p/q
into a per-thing fraction. This will never overflow. Read moresourcefn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
fn from_rational_approximation<N>(p: N, q: N) -> Selfwhere
N: RationalArg + TryInto<Self::Inner> + TryInto<Self::Upper>,
Self::Inner: Into<N>,
Self::from_rational
.sourceimpl Pow<usize> for Perquintill
impl Pow<usize> for Perquintill
sourceimpl Saturating for Perquintill
impl Saturating for Perquintill
sourcefn saturating_add(self, rhs: Self) -> Self
fn saturating_add(self, rhs: Self) -> Self
Saturating addition. Compute self + rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossless if it does not saturate.
sourcefn saturating_sub(self, rhs: Self) -> Self
fn saturating_sub(self, rhs: Self) -> Self
Saturating subtraction. Compute self - rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossless if it does not saturate.
sourcefn saturating_mul(self, rhs: Self) -> Self
fn saturating_mul(self, rhs: Self) -> Self
Saturating multiply. Compute self * rhs
, saturating at the numeric bounds instead of
overflowing. This operation is lossy.
sourcefn saturating_pow(self, exp: usize) -> Self
fn saturating_pow(self, exp: usize) -> Self
Saturating exponentiation. Computes self.pow(exp)
, saturating at the numeric
bounds instead of overflowing. This operation is lossy.
sourcefn saturating_inc(&mut self)where
Self: One,
fn saturating_inc(&mut self)where
Self: One,
sourcefn saturating_dec(&mut self)where
Self: One,
fn saturating_dec(&mut self)where
Self: One,
sourcefn saturating_accrue(&mut self, amount: Self)where
Self: One,
fn saturating_accrue(&mut self, amount: Self)where
Self: One,
amount
, saturating.sourcefn saturating_reduce(&mut self, amount: Self)where
Self: One,
fn saturating_reduce(&mut self, amount: Self)where
Self: One,
amount
, saturating at zero.sourceimpl SaturatingAdd for Perquintill
impl SaturatingAdd for Perquintill
sourcefn saturating_add(&self, v: &Self) -> Self
fn saturating_add(&self, v: &Self) -> Self
self + other
, saturating at the relevant high or low boundary of
the type. Read moresourceimpl SaturatingSub for Perquintill
impl SaturatingSub for Perquintill
sourcefn saturating_sub(&self, v: &Self) -> Self
fn saturating_sub(&self, v: &Self) -> Self
self - other
, saturating at the relevant high or low boundary of
the type. Read moresourceimpl Serialize for Perquintill
impl Serialize for Perquintill
sourceimpl Sub<Perquintill> for Perquintill
impl Sub<Perquintill> for Perquintill
sourceimpl TypeInfo for Perquintill
impl TypeInfo for Perquintill
type Identity = Perquintill
type Identity = Perquintill
sourceimpl Zero for Perquintill
impl Zero for Perquintill
impl Copy for Perquintill
impl EncodeLike<Perquintill> for Perquintill
impl Eq for Perquintill
impl StructuralEq for Perquintill
impl StructuralPartialEq for Perquintill
Auto Trait Implementations
impl RefUnwindSafe for Perquintill
impl Send for Perquintill
impl Sync for Perquintill
impl Unpin for Perquintill
impl UnwindSafe for Perquintill
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> DecodeAll for Twhere
T: Decode,
impl<T> DecodeAll for Twhere
T: Decode,
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
fn decode_all(input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read moreimpl<T> DecodeLimit for Twhere
T: Decode,
impl<T> DecodeLimit for Twhere
T: Decode,
fn decode_all_with_depth_limit(limit: u32, input: &mut &[u8]) -> Result<T, Error>
fn decode_all_with_depth_limit(limit: u32, input: &mut &[u8]) -> Result<T, Error>
Self
and consume all of the given input data. Read morefn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where
I: Input,
fn decode_with_depth_limit<I>(limit: u32, input: &mut I) -> Result<T, Error>where
I: Input,
Self
with the given maximum recursion depth and advance input
by the number of
bytes consumed. Read moreimpl<T> HasCompact for Twhere
T: 'static,
Compact<T>: for<'a> EncodeAsRef<'a, T> + Decode + From<T> + Into<T>,
impl<T> HasCompact for Twhere
T: 'static,
Compact<T>: for<'a> EncodeAsRef<'a, T> + Decode + From<T> + Into<T>,
type Type = Compact<T>
type Type = Compact<T>
impl<T> KeyedVec for Twhere
T: Codec,
impl<T> KeyedVec for Twhere
T: Codec,
fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>
fn to_keyed_vec(&self, prepend_key: &[u8]) -> Vec<u8, Global>
Self
prepended by given slice.sourceimpl<T> LowerBounded for Twhere
T: Bounded,
impl<T> LowerBounded for Twhere
T: Bounded,
sourceimpl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
sourcefn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
sourcefn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
T
. Read moresourceimpl<T> ThresholdOrd<T> for Twhere
T: Ord + PartialOrd<T> + Copy + Clone + Zero + Saturating,
impl<T> ThresholdOrd<T> for Twhere
T: Ord + PartialOrd<T> + Copy + Clone + Zero + Saturating,
sourceimpl<T, S> UniqueSaturatedFrom<T> for Swhere
S: TryFrom<T> + Bounded,
impl<T, S> UniqueSaturatedFrom<T> for Swhere
S: TryFrom<T> + Bounded,
sourcefn unique_saturated_from(t: T) -> S
fn unique_saturated_from(t: T) -> S
T
into an equivalent instance of Self
.sourceimpl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
sourcefn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.