Struct cosmwasm_std::Decimal256
source · [−]pub struct Decimal256(_);
Expand description
A fixed-point decimal value with 18 fractional digits, i.e. Decimal256(1_000_000_000_000_000_000) == 1.0
The greatest possible value that can be represented is 115792089237316195423570985008687907853269984665640564039457.584007913129639935 (which is (2^256 - 1) / 10^18)
Implementations
sourceimpl Decimal256
impl Decimal256
sourcepub const DECIMAL_PLACES: u32 = 18u32
pub const DECIMAL_PLACES: u32 = 18u32
The number of decimal places. Since decimal types are fixed-point rather than floating-point, this is a constant.
sourcepub const fn new(value: Uint256) -> Self
pub const fn new(value: Uint256) -> Self
Creates a Decimal256 from Uint256
This is equivalent to Decimal256::from_atomics(value, 18)
but usable in a const context.
sourcepub const fn raw(value: u128) -> Self
pub const fn raw(value: u128) -> Self
Creates a Decimal256 from u128
This is equivalent to Decimal256::from_atomics(value, 18)
but usable in a const context.
sourcepub fn from_atomics(
atomics: impl Into<Uint256>,
decimal_places: u32
) -> Result<Self, Decimal256RangeExceeded>
pub fn from_atomics(
atomics: impl Into<Uint256>,
decimal_places: u32
) -> Result<Self, Decimal256RangeExceeded>
Creates a decimal from a number of atomic units and the number of decimal places. The inputs will be converted internally to form a decimal with 18 decimal places. So the input 123 and 2 will create the decimal 1.23.
Using 18 decimal places is slightly more efficient than other values as no internal conversion is necessary.
Examples
let a = Decimal256::from_atomics(1234u64, 3).unwrap();
assert_eq!(a.to_string(), "1.234");
let a = Decimal256::from_atomics(1234u128, 0).unwrap();
assert_eq!(a.to_string(), "1234");
let a = Decimal256::from_atomics(1u64, 18).unwrap();
assert_eq!(a.to_string(), "0.000000000000000001");
let a = Decimal256::from_atomics(Uint256::MAX, 18).unwrap();
assert_eq!(a, Decimal256::MAX);
sourcepub fn from_ratio(
numerator: impl Into<Uint256>,
denominator: impl Into<Uint256>
) -> Self
pub fn from_ratio(
numerator: impl Into<Uint256>,
denominator: impl Into<Uint256>
) -> Self
Returns the ratio (numerator / denominator) as a Decimal256
sourcepub fn checked_from_ratio(
numerator: impl Into<Uint256>,
denominator: impl Into<Uint256>
) -> Result<Self, CheckedFromRatioError>
pub fn checked_from_ratio(
numerator: impl Into<Uint256>,
denominator: impl Into<Uint256>
) -> Result<Self, CheckedFromRatioError>
Returns the ratio (numerator / denominator) as a Decimal256
pub const fn is_zero(&self) -> bool
sourcepub const fn atomics(&self) -> Uint256
pub const fn atomics(&self) -> Uint256
A decimal is an integer of atomic units plus a number that specifies the position of the decimal dot. So any decimal can be expressed as two numbers.
Examples
// Value with whole and fractional part
let a = Decimal256::from_str("1.234").unwrap();
assert_eq!(a.decimal_places(), 18);
assert_eq!(a.atomics(), Uint256::from(1234000000000000000u128));
// Smallest possible value
let b = Decimal256::from_str("0.000000000000000001").unwrap();
assert_eq!(b.decimal_places(), 18);
assert_eq!(b.atomics(), Uint256::from(1u128));
sourcepub const fn decimal_places(&self) -> u32
pub const fn decimal_places(&self) -> u32
The number of decimal places. This is a constant value for now but this could potentially change as the type evolves.
See also Decimal256::atomics()
.
sourcepub fn checked_ceil(&self) -> Result<Self, RoundUpOverflowError>
pub fn checked_ceil(&self) -> Result<Self, RoundUpOverflowError>
Rounds value up after decimal places. Returns OverflowError on overflow.
pub fn checked_add(self, other: Self) -> Result<Self, OverflowError>
pub fn checked_sub(self, other: Self) -> Result<Self, OverflowError>
sourcepub fn checked_mul(self, other: Self) -> Result<Self, OverflowError>
pub fn checked_mul(self, other: Self) -> Result<Self, OverflowError>
Multiplies one Decimal256
by another, returning an OverflowError
if an overflow occurred.
sourcepub fn pow(self, exp: u32) -> Self
pub fn pow(self, exp: u32) -> Self
Raises a value to the power of exp
, panics if an overflow occurred.
sourcepub fn checked_pow(self, exp: u32) -> Result<Self, OverflowError>
pub fn checked_pow(self, exp: u32) -> Result<Self, OverflowError>
Raises a value to the power of exp
, returning an OverflowError
if an overflow occurred.
pub fn checked_div(self, other: Self) -> Result<Self, CheckedFromRatioError>
pub fn checked_rem(self, other: Self) -> Result<Self, DivideByZeroError>
sourcepub fn sqrt(&self) -> Self
pub fn sqrt(&self) -> Self
Returns the approximate square root as a Decimal256.
This should not overflow or panic.
pub fn abs_diff(self, other: Self) -> Self
pub fn saturating_add(self, other: Self) -> Self
pub fn saturating_sub(self, other: Self) -> Self
pub fn saturating_mul(self, other: Self) -> Self
pub fn saturating_pow(self, exp: u32) -> Self
Trait Implementations
sourceimpl Add<&Decimal256> for &Decimal256
impl Add<&Decimal256> for &Decimal256
type Output = <Decimal256 as Add<Decimal256>>::Output
type Output = <Decimal256 as Add<Decimal256>>::Output
+
operator.sourcefn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresourceimpl Add<&Decimal256> for Decimal256
impl Add<&Decimal256> for Decimal256
type Output = <Decimal256 as Add<Decimal256>>::Output
type Output = <Decimal256 as Add<Decimal256>>::Output
+
operator.sourcefn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresourceimpl<'a> Add<Decimal256> for &'a Decimal256
impl<'a> Add<Decimal256> for &'a Decimal256
type Output = <Decimal256 as Add<Decimal256>>::Output
type Output = <Decimal256 as Add<Decimal256>>::Output
+
operator.sourcefn add(self, other: Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresourceimpl Add<Decimal256> for Decimal256
impl Add<Decimal256> for Decimal256
type Output = Decimal256
type Output = Decimal256
+
operator.sourceimpl AddAssign<&Decimal256> for Decimal256
impl AddAssign<&Decimal256> for Decimal256
sourcefn add_assign(&mut self, other: &Decimal256)
fn add_assign(&mut self, other: &Decimal256)
+=
operation. Read moresourceimpl AddAssign<Decimal256> for Decimal256
impl AddAssign<Decimal256> for Decimal256
sourcefn add_assign(&mut self, rhs: Decimal256)
fn add_assign(&mut self, rhs: Decimal256)
+=
operation. Read moresourceimpl Clone for Decimal256
impl Clone for Decimal256
sourcefn clone(&self) -> Decimal256
fn clone(&self) -> Decimal256
1.0.0 · sourceconst fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl Debug for Decimal256
impl Debug for Decimal256
sourceimpl Default for Decimal256
impl Default for Decimal256
sourcefn default() -> Decimal256
fn default() -> Decimal256
sourceimpl<'de> Deserialize<'de> for Decimal256
impl<'de> Deserialize<'de> for Decimal256
Deserializes as a base64 string
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 Display for Decimal256
impl Display for Decimal256
sourceimpl Div<&Decimal256> for &Decimal256
impl Div<&Decimal256> for &Decimal256
type Output = <Decimal256 as Div<Decimal256>>::Output
type Output = <Decimal256 as Div<Decimal256>>::Output
/
operator.sourcefn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresourceimpl Div<&Decimal256> for Decimal256
impl Div<&Decimal256> for Decimal256
type Output = <Decimal256 as Div<Decimal256>>::Output
type Output = <Decimal256 as Div<Decimal256>>::Output
/
operator.sourcefn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresourceimpl<'a> Div<Decimal256> for &'a Decimal256
impl<'a> Div<Decimal256> for &'a Decimal256
type Output = <Decimal256 as Div<Decimal256>>::Output
type Output = <Decimal256 as Div<Decimal256>>::Output
/
operator.sourcefn div(self, other: Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresourceimpl Div<Decimal256> for Decimal256
impl Div<Decimal256> for Decimal256
type Output = Decimal256
type Output = Decimal256
/
operator.sourceimpl Div<Uint256> for Decimal256
impl Div<Uint256> for Decimal256
sourceimpl DivAssign<&Decimal256> for Decimal256
impl DivAssign<&Decimal256> for Decimal256
sourcefn div_assign(&mut self, other: &Decimal256)
fn div_assign(&mut self, other: &Decimal256)
/=
operation. Read moresourceimpl DivAssign<Decimal256> for Decimal256
impl DivAssign<Decimal256> for Decimal256
sourcefn div_assign(&mut self, rhs: Decimal256)
fn div_assign(&mut self, rhs: Decimal256)
/=
operation. Read moresourceimpl DivAssign<Uint256> for Decimal256
impl DivAssign<Uint256> for Decimal256
sourcefn div_assign(&mut self, rhs: Uint256)
fn div_assign(&mut self, rhs: Uint256)
/=
operation. Read moresourceimpl Fraction<Uint256> for Decimal256
impl Fraction<Uint256> for Decimal256
sourceimpl From<Decimal> for Decimal256
impl From<Decimal> for Decimal256
sourceimpl FromStr for Decimal256
impl FromStr for Decimal256
sourceimpl JsonSchema for Decimal256
impl JsonSchema for Decimal256
sourcefn schema_name() -> String
fn schema_name() -> String
sourcefn json_schema(gen: &mut SchemaGenerator) -> Schema
fn json_schema(gen: &mut SchemaGenerator) -> Schema
sourcefn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref
keyword. Read moresourceimpl Mul<&Decimal256> for &Decimal256
impl Mul<&Decimal256> for &Decimal256
type Output = <Decimal256 as Mul<Decimal256>>::Output
type Output = <Decimal256 as Mul<Decimal256>>::Output
*
operator.sourcefn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresourceimpl Mul<&Decimal256> for Decimal256
impl Mul<&Decimal256> for Decimal256
type Output = <Decimal256 as Mul<Decimal256>>::Output
type Output = <Decimal256 as Mul<Decimal256>>::Output
*
operator.sourcefn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresourceimpl<'a> Mul<Decimal256> for &'a Decimal256
impl<'a> Mul<Decimal256> for &'a Decimal256
type Output = <Decimal256 as Mul<Decimal256>>::Output
type Output = <Decimal256 as Mul<Decimal256>>::Output
*
operator.sourcefn mul(self, other: Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresourceimpl Mul<Decimal256> for Decimal256
impl Mul<Decimal256> for Decimal256
type Output = Decimal256
type Output = Decimal256
*
operator.sourceimpl Mul<Decimal256> for Uint256
impl Mul<Decimal256> for Uint256
Both du and ud with d: Decimal256 and u: Uint256 returns an Uint256. There is no specific reason for this decision other than the initial use cases we have. If you need a Decimal256 result for the same calculation, use Decimal256(du) or Decimal256(ud).
sourceimpl Mul<Uint256> for Decimal256
impl Mul<Uint256> for Decimal256
sourceimpl MulAssign<&Decimal256> for Decimal256
impl MulAssign<&Decimal256> for Decimal256
sourcefn mul_assign(&mut self, other: &Decimal256)
fn mul_assign(&mut self, other: &Decimal256)
*=
operation. Read moresourceimpl MulAssign<Decimal256> for Decimal256
impl MulAssign<Decimal256> for Decimal256
sourcefn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*=
operation. Read moresourceimpl Ord for Decimal256
impl Ord for Decimal256
sourcefn cmp(&self, other: &Decimal256) -> Ordering
fn cmp(&self, other: &Decimal256) -> Ordering
1.21.0 · sourceconst fn max(self, other: Self) -> Self
const fn max(self, other: Self) -> Self
1.21.0 · sourceconst fn min(self, other: Self) -> Self
const fn min(self, other: Self) -> Self
1.50.0 · sourceconst fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
const fn clamp(self, min: Self, max: Self) -> Selfwhere
Self: PartialOrd<Self>,
sourceimpl PartialEq<&Decimal256> for Decimal256
impl PartialEq<&Decimal256> for Decimal256
sourcefn eq(&self, rhs: &&Decimal256) -> bool
fn eq(&self, rhs: &&Decimal256) -> bool
sourceimpl PartialEq<Decimal256> for &Decimal256
impl PartialEq<Decimal256> for &Decimal256
sourcefn eq(&self, rhs: &Decimal256) -> bool
fn eq(&self, rhs: &Decimal256) -> bool
sourceimpl PartialEq<Decimal256> for Decimal256
impl PartialEq<Decimal256> for Decimal256
sourcefn eq(&self, other: &Decimal256) -> bool
fn eq(&self, other: &Decimal256) -> bool
sourceimpl PartialOrd<Decimal256> for Decimal256
impl PartialOrd<Decimal256> for Decimal256
sourcefn partial_cmp(&self, other: &Decimal256) -> Option<Ordering>
fn partial_cmp(&self, other: &Decimal256) -> Option<Ordering>
1.0.0 · sourceconst fn le(&self, other: &Rhs) -> bool
const fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moresourceimpl Rem<&Decimal256> for &Decimal256
impl Rem<&Decimal256> for &Decimal256
type Output = <Decimal256 as Rem<Decimal256>>::Output
type Output = <Decimal256 as Rem<Decimal256>>::Output
%
operator.sourcefn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresourceimpl Rem<&Decimal256> for Decimal256
impl Rem<&Decimal256> for Decimal256
type Output = <Decimal256 as Rem<Decimal256>>::Output
type Output = <Decimal256 as Rem<Decimal256>>::Output
%
operator.sourcefn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresourceimpl<'a> Rem<Decimal256> for &'a Decimal256
impl<'a> Rem<Decimal256> for &'a Decimal256
type Output = <Decimal256 as Rem<Decimal256>>::Output
type Output = <Decimal256 as Rem<Decimal256>>::Output
%
operator.sourcefn rem(self, other: Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresourceimpl Rem<Decimal256> for Decimal256
impl Rem<Decimal256> for Decimal256
type Output = Decimal256
type Output = Decimal256
%
operator.sourceimpl RemAssign<&Decimal256> for Decimal256
impl RemAssign<&Decimal256> for Decimal256
sourcefn rem_assign(&mut self, other: &Decimal256)
fn rem_assign(&mut self, other: &Decimal256)
%=
operation. Read moresourceimpl RemAssign<Decimal256> for Decimal256
impl RemAssign<Decimal256> for Decimal256
sourcefn rem_assign(&mut self, rhs: Decimal256)
fn rem_assign(&mut self, rhs: Decimal256)
%=
operation. Read moresourceimpl Serialize for Decimal256
impl Serialize for Decimal256
Serializes as a decimal string
sourceimpl Sub<&Decimal256> for &Decimal256
impl Sub<&Decimal256> for &Decimal256
type Output = <Decimal256 as Sub<Decimal256>>::Output
type Output = <Decimal256 as Sub<Decimal256>>::Output
-
operator.sourcefn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresourceimpl Sub<&Decimal256> for Decimal256
impl Sub<&Decimal256> for Decimal256
type Output = <Decimal256 as Sub<Decimal256>>::Output
type Output = <Decimal256 as Sub<Decimal256>>::Output
-
operator.sourcefn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresourceimpl<'a> Sub<Decimal256> for &'a Decimal256
impl<'a> Sub<Decimal256> for &'a Decimal256
type Output = <Decimal256 as Sub<Decimal256>>::Output
type Output = <Decimal256 as Sub<Decimal256>>::Output
-
operator.sourcefn sub(self, other: Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresourceimpl Sub<Decimal256> for Decimal256
impl Sub<Decimal256> for Decimal256
type Output = Decimal256
type Output = Decimal256
-
operator.sourceimpl SubAssign<&Decimal256> for Decimal256
impl SubAssign<&Decimal256> for Decimal256
sourcefn sub_assign(&mut self, other: &Decimal256)
fn sub_assign(&mut self, other: &Decimal256)
-=
operation. Read moresourceimpl SubAssign<Decimal256> for Decimal256
impl SubAssign<Decimal256> for Decimal256
sourcefn sub_assign(&mut self, rhs: Decimal256)
fn sub_assign(&mut self, rhs: Decimal256)
-=
operation. Read more