pub struct Decimal { /* private fields */ }Expand description
Decimal
Owned fixed-point decimal with an explicit i128 mantissa and base-10 scale.
Numeric policy:
- add/sub/mul are saturating on overflow
- div by zero returns
Decimal::ZERO - div overflow falls back to signed saturation at
DEFAULT_DIVISION_SCALE - rem by zero returns
Decimal::ZERO(andchecked_remreturnsNone)
Implementations§
Source§impl Decimal
impl Decimal
pub const ZERO: Decimal
Sourcepub const fn max_supported_scale() -> u32
pub const fn max_supported_scale() -> u32
Returns the maximum supported decimal scale.
Sourcepub const fn new(num: i64, scale: u32) -> Decimal
pub const fn new(num: i64, scale: u32) -> Decimal
Construct a decimal from mantissa and scale.
Panics when scale exceeds the supported range.
Sourcepub const fn try_new(num: i64, scale: u32) -> Option<Decimal>
pub const fn try_new(num: i64, scale: u32) -> Option<Decimal>
Fallible constructor from mantissa and scale.
Sourcepub const fn new_unchecked(num: i64, scale: u32) -> Decimal
pub const fn new_unchecked(num: i64, scale: u32) -> Decimal
Unchecked constructor from mantissa and scale.
This constructor may violate the decimal scale invariant and should only
be used when the caller already enforces scale <= MAX_SUPPORTED_SCALE.
Sourcepub fn from_num<N>(n: N) -> Option<Decimal>where
N: NumCast,
pub fn from_num<N>(n: N) -> Option<Decimal>where
N: NumCast,
Fallible conversion from common numeric types.
This path is lossy for float inputs and may lose precision for large values.
Prefer exact integer constructors (from_i64, from_u64) or explicit
float constructors (from_f32_lossy, from_f64_lossy) when possible.
Sourcepub fn from_f32_lossy(n: f32) -> Option<Decimal>
pub fn from_f32_lossy(n: f32) -> Option<Decimal>
Explicit lossy conversion from f32.
Uses decimal text round-tripping from the binary float representation. This is intentionally lossy and should be used only when float input is required.
Sourcepub fn from_f64_lossy(n: f64) -> Option<Decimal>
pub fn from_f64_lossy(n: f64) -> Option<Decimal>
Explicit lossy conversion from f64.
Uses decimal text round-tripping from the binary float representation. This is intentionally lossy and should be used only when float input is required.
Sourcepub const fn parts(&self) -> DecimalParts
pub const fn parts(&self) -> DecimalParts
PARTS
Decompose into mantissa and scale.
Sourcepub const fn is_integer(&self) -> bool
pub const fn is_integer(&self) -> bool
Returns true if the decimal has no fractional component.
Sourcepub fn scale_to_integer(&self, target_scale: u32) -> Option<i128>
pub fn scale_to_integer(&self, target_scale: u32) -> Option<i128>
Scale by 10^target_scale and require an integer result.
Returns None if:
- fractional precision would be lost
- integer overflow occurs
Sourcepub const fn round_dp(&self, dp: u32) -> Decimal
pub const fn round_dp(&self, dp: u32) -> Decimal
WRAPPED FUNCTIONS
Round to a given number of decimal places.
Sourcepub fn saturating_add(self, rhs: Decimal) -> Decimal
pub fn saturating_add(self, rhs: Decimal) -> Decimal
Saturating addition.
Sourcepub fn saturating_sub(self, rhs: Decimal) -> Decimal
pub fn saturating_sub(self, rhs: Decimal) -> Decimal
Saturating subtraction.
Sourcepub fn checked_rem(self, rhs: Decimal) -> Option<Decimal>
pub fn checked_rem(self, rhs: Decimal) -> Option<Decimal>
Checked remainder; returns None on division by zero.
Sourcepub fn from_i128_with_scale(num: i128, scale: u32) -> Decimal
pub fn from_i128_with_scale(num: i128, scale: u32) -> Decimal
Build from a raw mantissa and scale.
Sourcepub const fn is_sign_negative(&self) -> bool
pub const fn is_sign_negative(&self) -> bool
Returns true if the value is negative.
Trait Implementations§
Source§impl AddAssign<Decimal> for E18s
impl AddAssign<Decimal> for E18s
Source§fn add_assign(&mut self, other: Decimal)
fn add_assign(&mut self, other: Decimal)
+= operation. Read moreSource§impl AddAssign<Decimal> for E8s
impl AddAssign<Decimal> for E8s
Source§fn add_assign(&mut self, other: Decimal)
fn add_assign(&mut self, other: Decimal)
+= operation. Read moreSource§impl AddAssign<Decimal> for Usd
impl AddAssign<Decimal> for Usd
Source§fn add_assign(&mut self, other: Decimal)
fn add_assign(&mut self, other: Decimal)
+= operation. Read moreSource§impl AddAssign for Decimal
impl AddAssign for Decimal
Source§fn add_assign(&mut self, rhs: Decimal)
fn add_assign(&mut self, rhs: Decimal)
+= operation. Read moreSource§impl CandidType for Decimal
impl CandidType for Decimal
Source§impl<'de> Deserialize<'de> for Decimal
impl<'de> Deserialize<'de> for Decimal
Source§fn deserialize<D>(
deserializer: D,
) -> Result<Decimal, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<Decimal, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Source§impl DivAssign<Decimal> for E18s
impl DivAssign<Decimal> for E18s
Source§fn div_assign(&mut self, other: Decimal)
fn div_assign(&mut self, other: Decimal)
/= operation. Read moreSource§impl DivAssign<Decimal> for E8s
impl DivAssign<Decimal> for E8s
Source§fn div_assign(&mut self, other: Decimal)
fn div_assign(&mut self, other: Decimal)
/= operation. Read moreSource§impl DivAssign<Decimal> for Usd
impl DivAssign<Decimal> for Usd
Source§fn div_assign(&mut self, other: Decimal)
fn div_assign(&mut self, other: Decimal)
/= operation. Read moreSource§impl DivAssign for Decimal
impl DivAssign for Decimal
Source§fn div_assign(&mut self, rhs: Decimal)
fn div_assign(&mut self, rhs: Decimal)
/= operation. Read moreSource§impl FieldValue for Decimal
impl FieldValue for Decimal
Source§impl FromPrimitive for Decimal
impl FromPrimitive for Decimal
Source§fn from_i64(n: i64) -> Option<Decimal>
fn from_i64(n: i64) -> Option<Decimal>
i64 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u64(n: u64) -> Option<Decimal>
fn from_u64(n: u64) -> Option<Decimal>
u64 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_f32(n: f32) -> Option<Decimal>
fn from_f32(n: f32) -> Option<Decimal>
f32 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_f64(n: f64) -> Option<Decimal>
fn from_f64(n: f64) -> Option<Decimal>
f64 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned. Read moreSource§fn from_isize(n: isize) -> Option<Self>
fn from_isize(n: isize) -> Option<Self>
isize to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i8(n: i8) -> Option<Self>
fn from_i8(n: i8) -> Option<Self>
i8 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i16(n: i16) -> Option<Self>
fn from_i16(n: i16) -> Option<Self>
i16 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i32(n: i32) -> Option<Self>
fn from_i32(n: i32) -> Option<Self>
i32 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_i128(n: i128) -> Option<Self>
fn from_i128(n: i128) -> Option<Self>
i128 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned. Read moreSource§fn from_usize(n: usize) -> Option<Self>
fn from_usize(n: usize) -> Option<Self>
usize to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u8(n: u8) -> Option<Self>
fn from_u8(n: u8) -> Option<Self>
u8 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§fn from_u16(n: u16) -> Option<Self>
fn from_u16(n: u16) -> Option<Self>
u16 to return an optional value of this type. If the
value cannot be represented by this type, then None is returned.Source§impl MulAssign<Decimal> for E18s
impl MulAssign<Decimal> for E18s
Source§fn mul_assign(&mut self, other: Decimal)
fn mul_assign(&mut self, other: Decimal)
*= operation. Read moreSource§impl MulAssign<Decimal> for E8s
impl MulAssign<Decimal> for E8s
Source§fn mul_assign(&mut self, other: Decimal)
fn mul_assign(&mut self, other: Decimal)
*= operation. Read moreSource§impl MulAssign<Decimal> for Usd
impl MulAssign<Decimal> for Usd
Source§fn mul_assign(&mut self, other: Decimal)
fn mul_assign(&mut self, other: Decimal)
*= operation. Read moreSource§impl MulAssign for Decimal
impl MulAssign for Decimal
Source§fn mul_assign(&mut self, rhs: Decimal)
fn mul_assign(&mut self, rhs: Decimal)
*= operation. Read moreSource§impl Ord for Decimal
impl Ord for Decimal
Source§impl PartialOrd<Decimal> for E18s
impl PartialOrd<Decimal> for E18s
Source§impl PartialOrd<Decimal> for E8s
impl PartialOrd<Decimal> for E8s
Source§impl PartialOrd<Decimal> for Usd
impl PartialOrd<Decimal> for Usd
Source§impl PartialOrd<E18s> for Decimal
impl PartialOrd<E18s> for Decimal
Source§impl PartialOrd<E8s> for Decimal
impl PartialOrd<E8s> for Decimal
Source§impl PartialOrd<Usd> for Decimal
impl PartialOrd<Usd> for Decimal
Source§impl PartialOrd for Decimal
impl PartialOrd for Decimal
Source§impl SanitizeAuto for Decimal
impl SanitizeAuto for Decimal
fn sanitize_self(&mut self, _ctx: &mut dyn VisitorContext)
Source§impl SanitizeCustom for Decimal
impl SanitizeCustom for Decimal
fn sanitize_custom(&mut self, _ctx: &mut dyn VisitorContext)
Source§impl Sanitizer<Decimal> for RoundDecimalPlaces
impl Sanitizer<Decimal> for RoundDecimalPlaces
Source§impl Serialize for Decimal
impl Serialize for Decimal
Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
Source§impl SubAssign<Decimal> for E18s
impl SubAssign<Decimal> for E18s
Source§fn sub_assign(&mut self, other: Decimal)
fn sub_assign(&mut self, other: Decimal)
-= operation. Read moreSource§impl SubAssign<Decimal> for E8s
impl SubAssign<Decimal> for E8s
Source§fn sub_assign(&mut self, other: Decimal)
fn sub_assign(&mut self, other: Decimal)
-= operation. Read moreSource§impl SubAssign<Decimal> for Usd
impl SubAssign<Decimal> for Usd
Source§fn sub_assign(&mut self, other: Decimal)
fn sub_assign(&mut self, other: Decimal)
-= operation. Read moreSource§impl SubAssign for Decimal
impl SubAssign for Decimal
Source§fn sub_assign(&mut self, rhs: Decimal)
fn sub_assign(&mut self, rhs: Decimal)
-= operation. Read moreSource§impl ToPrimitive for Decimal
impl ToPrimitive for Decimal
Source§fn to_i32(&self) -> Option<i32>
fn to_i32(&self) -> Option<i32>
self to an i32. If the value cannot be
represented by an i32, then None is returned.Source§fn to_i64(&self) -> Option<i64>
fn to_i64(&self) -> Option<i64>
self to an i64. If the value cannot be
represented by an i64, then None is returned.Source§fn to_u64(&self) -> Option<u64>
fn to_u64(&self) -> Option<u64>
self to a u64. If the value cannot be
represented by a u64, then None is returned.Source§fn to_u128(&self) -> Option<u128>
fn to_u128(&self) -> Option<u128>
self to a u128. If the value cannot be
represented by a u128 (u64 under the default implementation), then
None is returned. Read moreSource§fn to_f32(&self) -> Option<f32>
fn to_f32(&self) -> Option<f32>
self to an f32. Overflows may map to positive
or negative inifinity, otherwise None is returned if the value cannot
be represented by an f32.Source§fn to_f64(&self) -> Option<f64>
fn to_f64(&self) -> Option<f64>
self to an f64. Overflows may map to positive
or negative inifinity, otherwise None is returned if the value cannot
be represented by an f64. Read moreSource§fn to_isize(&self) -> Option<isize>
fn to_isize(&self) -> Option<isize>
self to an isize. If the value cannot be
represented by an isize, then None is returned.Source§fn to_i8(&self) -> Option<i8>
fn to_i8(&self) -> Option<i8>
self to an i8. If the value cannot be
represented by an i8, then None is returned.Source§fn to_i16(&self) -> Option<i16>
fn to_i16(&self) -> Option<i16>
self to an i16. If the value cannot be
represented by an i16, then None is returned.Source§fn to_i128(&self) -> Option<i128>
fn to_i128(&self) -> Option<i128>
self to an i128. If the value cannot be
represented by an i128 (i64 under the default implementation), then
None is returned. Read moreSource§fn to_usize(&self) -> Option<usize>
fn to_usize(&self) -> Option<usize>
self to a usize. If the value cannot be
represented by a usize, then None is returned.Source§fn to_u8(&self) -> Option<u8>
fn to_u8(&self) -> Option<u8>
self to a u8. If the value cannot be
represented by a u8, then None is returned.Source§impl ValidateAuto for Decimal
impl ValidateAuto for Decimal
fn validate_self(&self, _ctx: &mut dyn VisitorContext)
Source§impl ValidateCustom for Decimal
impl ValidateCustom for Decimal
fn validate_custom(&self, _ctx: &mut dyn VisitorContext)
Source§impl Validator<Decimal> for MaxDecimalPlaces
impl Validator<Decimal> for MaxDecimalPlaces
fn validate(&self, n: &Decimal, ctx: &mut dyn VisitorContext)
Source§impl Visitable for Decimal
impl Visitable for Decimal
fn drive(&self, _: &mut dyn VisitorCore)
fn drive_mut(&mut self, _: &mut dyn VisitorMutCore)
impl Atomic for Decimal
impl Copy for Decimal
impl Eq for Decimal
Auto Trait Implementations§
impl Freeze for Decimal
impl RefUnwindSafe for Decimal
impl Send for Decimal
impl Sync for Decimal
impl Unpin for Decimal
impl UnsafeUnpin for Decimal
impl UnwindSafe for Decimal
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> UpdateView for Twhere
T: UpdateView,
impl<T> UpdateView for Twhere
T: UpdateView,
Source§impl<T> UpdateView for T
impl<T> UpdateView for T
Source§type UpdateViewType = T
type UpdateViewType = T
Self.