Struct cosmwasm_std::Decimal256
source · pub struct Decimal256(/* private fields */);
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§
source§impl 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 const fn percent(x: u64) -> Self
pub const fn percent(x: u64) -> Self
Convert x% into Decimal256
§Examples
const HALF: Decimal256 = Decimal256::percent(50);
assert_eq!(HALF, Decimal256::from_str("0.5").unwrap());
sourcepub const fn permille(x: u64) -> Self
pub const fn permille(x: u64) -> Self
Convert permille (x/1000) into Decimal256
§Examples
const HALF: Decimal256 = Decimal256::permille(500);
assert_eq!(HALF, Decimal256::from_str("0.5").unwrap());
sourcepub const fn bps(x: u64) -> Self
pub const fn bps(x: u64) -> Self
Convert basis points (x/10000) into Decimal256
§Examples
const TWO_BPS: Decimal256 = Decimal256::bps(2);
const HALF: Decimal256 = Decimal256::bps(5000);
assert_eq!(TWO_BPS, Decimal256::from_str("0.0002").unwrap());
assert_eq!(HALF, Decimal256::from_str("0.5").unwrap());
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
sourcepub fn to_uint_floor(self) -> Uint256
pub fn to_uint_floor(self) -> Uint256
Converts this decimal to an unsigned integer by truncating the fractional part, e.g. 22.5 becomes 22.
§Examples
use core::str::FromStr;
use cosmwasm_std::{Decimal256, Uint256};
let d = Decimal256::from_str("12.345").unwrap();
assert_eq!(d.to_uint_floor(), Uint256::from(12u64));
let d = Decimal256::from_str("12.999").unwrap();
assert_eq!(d.to_uint_floor(), Uint256::from(12u64));
let d = Decimal256::from_str("75.0").unwrap();
assert_eq!(d.to_uint_floor(), Uint256::from(75u64));
sourcepub fn to_uint_ceil(self) -> Uint256
pub fn to_uint_ceil(self) -> Uint256
Converts this decimal to an unsigned integer by rounting up to the next integer, e.g. 22.3 becomes 23.
§Examples
use core::str::FromStr;
use cosmwasm_std::{Decimal256, Uint256};
let d = Decimal256::from_str("12.345").unwrap();
assert_eq!(d.to_uint_ceil(), Uint256::from(13u64));
let d = Decimal256::from_str("12.999").unwrap();
assert_eq!(d.to_uint_ceil(), Uint256::from(13u64));
let d = Decimal256::from_str("75.0").unwrap();
assert_eq!(d.to_uint_ceil(), Uint256::from(75u64));
Trait Implementations§
source§impl Add<&Decimal256> for &Decimal256
impl Add<&Decimal256> for &Decimal256
source§fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresource§impl Add<&Decimal256> for Decimal256
impl Add<&Decimal256> for Decimal256
source§fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: &Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresource§impl<'a> Add<Decimal256> for &'a Decimal256
impl<'a> Add<Decimal256> for &'a Decimal256
source§fn add(self, other: Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
fn add(self, other: Decimal256) -> <Decimal256 as Add<Decimal256>>::Output
+
operation. Read moresource§impl Add for Decimal256
impl Add for Decimal256
source§impl AddAssign<&Decimal256> for Decimal256
impl AddAssign<&Decimal256> for Decimal256
source§fn add_assign(&mut self, other: &Decimal256)
fn add_assign(&mut self, other: &Decimal256)
+=
operation. Read moresource§impl AddAssign for Decimal256
impl AddAssign for Decimal256
source§fn add_assign(&mut self, rhs: Decimal256)
fn add_assign(&mut self, rhs: Decimal256)
+=
operation. Read moresource§impl Clone for Decimal256
impl Clone for Decimal256
source§fn clone(&self) -> Decimal256
fn clone(&self) -> Decimal256
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for Decimal256
impl Debug for Decimal256
source§impl Default for Decimal256
impl Default for Decimal256
source§fn default() -> Decimal256
fn default() -> Decimal256
source§impl<'de> Deserialize<'de> for Decimal256
impl<'de> Deserialize<'de> for Decimal256
Deserializes as a base64 string
source§fn 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>,
source§impl Display for Decimal256
impl Display for Decimal256
source§impl Div<&Decimal256> for &Decimal256
impl Div<&Decimal256> for &Decimal256
source§fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresource§impl Div<&Decimal256> for Decimal256
impl Div<&Decimal256> for Decimal256
source§fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: &Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresource§impl<'a> Div<Decimal256> for &'a Decimal256
impl<'a> Div<Decimal256> for &'a Decimal256
source§fn div(self, other: Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
fn div(self, other: Decimal256) -> <Decimal256 as Div<Decimal256>>::Output
/
operation. Read moresource§impl Div<Uint256> for Decimal256
impl Div<Uint256> for Decimal256
source§impl Div for Decimal256
impl Div for Decimal256
source§impl DivAssign<&Decimal256> for Decimal256
impl DivAssign<&Decimal256> for Decimal256
source§fn div_assign(&mut self, other: &Decimal256)
fn div_assign(&mut self, other: &Decimal256)
/=
operation. Read moresource§impl DivAssign<Uint256> for Decimal256
impl DivAssign<Uint256> for Decimal256
source§fn div_assign(&mut self, rhs: Uint256)
fn div_assign(&mut self, rhs: Uint256)
/=
operation. Read moresource§impl DivAssign for Decimal256
impl DivAssign for Decimal256
source§fn div_assign(&mut self, rhs: Decimal256)
fn div_assign(&mut self, rhs: Decimal256)
/=
operation. Read moresource§impl Fraction<Uint256> for Decimal256
impl Fraction<Uint256> for Decimal256
source§impl From<Decimal> for Decimal256
impl From<Decimal> for Decimal256
source§impl FromStr for Decimal256
impl FromStr for Decimal256
source§impl JsonSchema for Decimal256
impl JsonSchema for Decimal256
source§fn schema_name() -> String
fn schema_name() -> String
source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
source§fn json_schema(gen: &mut SchemaGenerator) -> Schema
fn json_schema(gen: &mut SchemaGenerator) -> Schema
source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref
keyword. Read moresource§impl Mul<&Decimal256> for &Decimal256
impl Mul<&Decimal256> for &Decimal256
source§fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresource§impl Mul<&Decimal256> for Decimal256
impl Mul<&Decimal256> for Decimal256
source§fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: &Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresource§impl<'a> Mul<Decimal256> for &'a Decimal256
impl<'a> Mul<Decimal256> for &'a Decimal256
source§fn mul(self, other: Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
fn mul(self, other: Decimal256) -> <Decimal256 as Mul<Decimal256>>::Output
*
operation. Read moresource§impl Mul for Decimal256
impl Mul for Decimal256
source§impl MulAssign<&Decimal256> for Decimal256
impl MulAssign<&Decimal256> for Decimal256
source§fn mul_assign(&mut self, other: &Decimal256)
fn mul_assign(&mut self, other: &Decimal256)
*=
operation. Read moresource§impl MulAssign for Decimal256
impl MulAssign for Decimal256
source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*=
operation. Read moresource§impl Ord for Decimal256
impl Ord for Decimal256
source§fn cmp(&self, other: &Decimal256) -> Ordering
fn cmp(&self, other: &Decimal256) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq<&Decimal256> for Decimal256
impl PartialEq<&Decimal256> for Decimal256
source§impl<'a> PartialEq<Decimal256> for &'a Decimal256
impl<'a> PartialEq<Decimal256> for &'a Decimal256
source§impl PartialEq for Decimal256
impl PartialEq for Decimal256
source§impl PartialOrd for Decimal256
impl PartialOrd for Decimal256
source§impl Rem<&Decimal256> for &Decimal256
impl Rem<&Decimal256> for &Decimal256
source§fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresource§impl Rem<&Decimal256> for Decimal256
impl Rem<&Decimal256> for Decimal256
source§fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: &Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresource§impl<'a> Rem<Decimal256> for &'a Decimal256
impl<'a> Rem<Decimal256> for &'a Decimal256
source§fn rem(self, other: Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
fn rem(self, other: Decimal256) -> <Decimal256 as Rem<Decimal256>>::Output
%
operation. Read moresource§impl Rem for Decimal256
impl Rem for Decimal256
source§impl RemAssign<&Decimal256> for Decimal256
impl RemAssign<&Decimal256> for Decimal256
source§fn rem_assign(&mut self, other: &Decimal256)
fn rem_assign(&mut self, other: &Decimal256)
%=
operation. Read moresource§impl RemAssign for Decimal256
impl RemAssign for Decimal256
source§fn rem_assign(&mut self, rhs: Decimal256)
fn rem_assign(&mut self, rhs: Decimal256)
%=
operation. Read moresource§impl Serialize for Decimal256
impl Serialize for Decimal256
Serializes as a decimal string
source§impl Sub<&Decimal256> for &Decimal256
impl Sub<&Decimal256> for &Decimal256
source§fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresource§impl Sub<&Decimal256> for Decimal256
impl Sub<&Decimal256> for Decimal256
source§fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: &Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresource§impl<'a> Sub<Decimal256> for &'a Decimal256
impl<'a> Sub<Decimal256> for &'a Decimal256
source§fn sub(self, other: Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
fn sub(self, other: Decimal256) -> <Decimal256 as Sub<Decimal256>>::Output
-
operation. Read moresource§impl Sub for Decimal256
impl Sub for Decimal256
source§impl SubAssign<&Decimal256> for Decimal256
impl SubAssign<&Decimal256> for Decimal256
source§fn sub_assign(&mut self, other: &Decimal256)
fn sub_assign(&mut self, other: &Decimal256)
-=
operation. Read moresource§impl SubAssign for Decimal256
impl SubAssign for Decimal256
source§fn sub_assign(&mut self, rhs: Decimal256)
fn sub_assign(&mut self, rhs: Decimal256)
-=
operation. Read moresource§impl<A> Sum<A> for Decimal256where
Self: Add<A, Output = Self>,
impl<A> Sum<A> for Decimal256where
Self: Add<A, Output = Self>,
source§impl TryFrom<Decimal256> for Decimal
impl TryFrom<Decimal256> for Decimal
source§type Error = DecimalRangeExceeded
type Error = DecimalRangeExceeded
source§impl TryFrom<Decimal256> for SignedDecimal
impl TryFrom<Decimal256> for SignedDecimal
source§type Error = SignedDecimalRangeExceeded
type Error = SignedDecimalRangeExceeded
source§impl TryFrom<Decimal256> for SignedDecimal256
impl TryFrom<Decimal256> for SignedDecimal256
source§type Error = SignedDecimal256RangeExceeded
type Error = SignedDecimal256RangeExceeded
source§impl TryFrom<SignedDecimal> for Decimal256
impl TryFrom<SignedDecimal> for Decimal256
source§type Error = Decimal256RangeExceeded
type Error = Decimal256RangeExceeded
source§impl TryFrom<SignedDecimal256> for Decimal256
impl TryFrom<SignedDecimal256> for Decimal256
source§type Error = Decimal256RangeExceeded
type Error = Decimal256RangeExceeded
impl Copy for Decimal256
impl Eq for Decimal256
impl StructuralPartialEq for Decimal256
Auto Trait Implementations§
impl Freeze for Decimal256
impl RefUnwindSafe for Decimal256
impl Send for Decimal256
impl Sync for Decimal256
impl Unpin for Decimal256
impl UnwindSafe for Decimal256
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more