pub struct Decimal { /* private fields */ }Expand description
Decimal represents a 128 bit representation of a fixed-precision decimal number.
The finite set of values of type Decimal are of the form m / 10e,
where m is an integer such that -296 < m < 296, and e is an integer
between 0 and 28 inclusive.
Implementations§
Source§impl Decimal
impl Decimal
Sourcepub const MIN: Decimal = MIN
Available on non-crate feature bigdecimal only.
pub const MIN: Decimal = MIN
bigdecimal only.The smallest value that can be represented by this decimal type.
§Examples
Basic usage:
assert_eq!(Decimal::MIN, dec!(-79_228_162_514_264_337_593_543_950_335));Sourcepub const MAX: Decimal = MAX
Available on non-crate feature bigdecimal only.
pub const MAX: Decimal = MAX
bigdecimal only.The largest value that can be represented by this decimal type.
§Examples
Basic usage:
assert_eq!(Decimal::MAX, dec!(79_228_162_514_264_337_593_543_950_335));Sourcepub const NEGATIVE_ONE: Decimal = NEGATIVE_ONE
Available on non-crate feature bigdecimal only.
pub const NEGATIVE_ONE: Decimal = NEGATIVE_ONE
bigdecimal only.Sourcepub const ONE_HUNDRED: Decimal = ONE_HUNDRED
Available on non-crate feature bigdecimal only.
pub const ONE_HUNDRED: Decimal = ONE_HUNDRED
bigdecimal only.Sourcepub const ONE_THOUSAND: Decimal = ONE_THOUSAND
Available on non-crate feature bigdecimal only.
pub const ONE_THOUSAND: Decimal = ONE_THOUSAND
bigdecimal only.Sourcepub const MAX_SCALE: u32 = MAX_SCALE_U32
Available on non-crate feature bigdecimal only.
pub const MAX_SCALE: u32 = MAX_SCALE_U32
bigdecimal only.The maximum supported scale value.
Some operations, such as Self::rescale may accept larger scale values, but these
operations will result in a final value with a scale no larger than this.
Note that the maximum scale is not the same as the maximum possible numeric precision in base-10.
Sourcepub fn new(num: i64, scale: u32) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn new(num: i64, scale: u32) -> Decimal
bigdecimal only.Returns a Decimal with a 64 bit m representation and corresponding e scale.
§Arguments
num- An i64 that represents themportion of the decimal numberscale- A u32 representing theeportion of the decimal number.
§Panics
This function panics if scale is > Self::MAX_SCALE.
§Example
let pi = Decimal::new(3141, 3);
assert_eq!(pi.to_string(), "3.141");Sourcepub const fn try_new(num: i64, scale: u32) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub const fn try_new(num: i64, scale: u32) -> Result<Decimal, Error>
bigdecimal only.Sourcepub fn from_i128_with_scale(num: i128, scale: u32) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn from_i128_with_scale(num: i128, scale: u32) -> Decimal
bigdecimal only.Creates a Decimal using a 128 bit signed m representation and corresponding e scale.
§Arguments
num- An i128 that represents themportion of the decimal numberscale- A u32 representing theeportion of the decimal number.
§Panics
This function panics if scale is > Self::MAX_SCALE or if num exceeds the maximum
supported 96 bits.
§Example
let pi = Decimal::from_i128_with_scale(3141i128, 3);
assert_eq!(pi.to_string(), "3.141");Sourcepub const fn try_from_i128_with_scale(
num: i128,
scale: u32,
) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub const fn try_from_i128_with_scale( num: i128, scale: u32, ) -> Result<Decimal, Error>
bigdecimal only.Checked version of Decimal::from_i128_with_scale. Will return Err instead
of panicking at run-time.
§Example
let max = Decimal::try_from_i128_with_scale(i128::MAX, u32::MAX);
assert!(max.is_err());Sourcepub const fn from_parts(
lo: u32,
mid: u32,
hi: u32,
negative: bool,
scale: u32,
) -> Decimal
Available on non-crate feature bigdecimal only.
pub const fn from_parts( lo: u32, mid: u32, hi: u32, negative: bool, scale: u32, ) -> Decimal
bigdecimal only.Returns a Decimal using the instances constituent parts.
§Arguments
lo- The low 32 bits of a 96-bit integer.mid- The middle 32 bits of a 96-bit integer.hi- The high 32 bits of a 96-bit integer.negative-trueto indicate a negative number.scale- A power of 10 ranging from 0 toSelf::MAX_SCALE.
§Example
let pi = Decimal::from_parts(1102470952, 185874565, 1703060790, false, 28);
assert_eq!(pi.to_string(), "3.1415926535897932384626433832");Sourcepub fn from_scientific(value: &str) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub fn from_scientific(value: &str) -> Result<Decimal, Error>
bigdecimal only.Sourcepub fn from_scientific_lossy(value: &str) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub fn from_scientific_lossy(value: &str) -> Result<Decimal, Error>
bigdecimal only.Returns a Result which if successful contains the Decimal constitution of
the scientific notation provided by value. If the exponent is negative and
the given base and exponent would exceed Decimal::MAX_SCALE then this
functions attempts to round the base to fit.
§Arguments
value- The scientific notation of theDecimal.
§Example
let value = Decimal::from_scientific_lossy("2.710505431213761e-20")?;
assert_eq!(value.to_string(), "0.0000000000000000000271050543");
let value = Decimal::from_scientific_lossy("2.5e-28")?;
assert_eq!(value.to_string(), "0.0000000000000000000000000003");
let value = Decimal::from_scientific_lossy("-2.5e-28")?;
assert_eq!(value.to_string(), "-0.0000000000000000000000000003");
let err = Decimal::from_scientific_lossy("2e-29").unwrap_err();
assert_eq!(err, Error::ScaleExceedsMaximumPrecision(29));Sourcepub fn from_str_radix(str: &str, radix: u32) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub fn from_str_radix(str: &str, radix: u32) -> Result<Decimal, Error>
bigdecimal only.Converts a string slice in a given base to a decimal.
The string is expected to be an optional + sign followed by digits. Digits are a subset of these characters, depending on radix, and will return an error if outside the expected range:
- 0-9
- a-z
- A-Z
§Examples
Basic usage:
assert_eq!(Decimal::from_str_radix("A", 16)?.to_string(), "10");Sourcepub fn from_str_exact(str: &str) -> Result<Decimal, Error>
Available on non-crate feature bigdecimal only.
pub fn from_str_exact(str: &str) -> Result<Decimal, Error>
bigdecimal only.Parses a string slice into a decimal. If the value underflows and cannot be represented with the given scale then this will return an error.
§Examples
Basic usage:
assert_eq!(Decimal::from_str_exact("0.001")?.to_string(), "0.001");
assert_eq!(Decimal::from_str_exact("0.00000_00000_00000_00000_00000_001")?.to_string(), "0.0000000000000000000000000001");
assert_eq!(Decimal::from_str_exact("0.00000_00000_00000_00000_00000_0001"), Err(Error::Underflow));Sourcepub fn array_string(&self) -> impl AsRef<str>
Available on non-crate feature bigdecimal only.
pub fn array_string(&self) -> impl AsRef<str>
bigdecimal only.Returns a string representation that is similar to alloc::string::ToString but
doesn’t require a heap allocation.
§Examples
assert_eq!(Decimal::from_str_exact("0.001")?.array_string().as_ref(), "0.001");Sourcepub const fn scale(&self) -> u32
Available on non-crate feature bigdecimal only.
pub const fn scale(&self) -> u32
bigdecimal only.Returns the scale of the decimal number, otherwise known as e.
§Example
let num = Decimal::new(1234, 3);
assert_eq!(num.scale(), 3u32);Sourcepub const fn mantissa(&self) -> i128
Available on non-crate feature bigdecimal only.
pub const fn mantissa(&self) -> i128
bigdecimal only.Returns the mantissa of the decimal number.
§Example
let num = dec!(-1.2345678);
assert_eq!(num.mantissa(), -12345678i128);
assert_eq!(num.scale(), 7);Sourcepub const fn is_zero(&self) -> bool
Available on non-crate feature bigdecimal only.
pub const fn is_zero(&self) -> bool
bigdecimal only.Returns true if this Decimal number is equivalent to zero.
§Example
let num = Decimal::ZERO;
assert!(num.is_zero());Sourcepub fn is_integer(&self) -> bool
Available on non-crate feature bigdecimal only.
pub fn is_integer(&self) -> bool
bigdecimal only.Returns true if this Decimal number has zero fractional part (is equal to an integer)
§Example
assert_eq!(dec!(5).is_integer(), true);
// Trailing zeros are also ignored
assert_eq!(dec!(5.0000).is_integer(), true);
// If there is a fractional part then it is not an integer
assert_eq!(dec!(5.1).is_integer(), false);Sourcepub fn set_sign(&mut self, positive: bool)
👎Deprecated since 1.4.0: please use set_sign_positive instead
Available on non-crate feature bigdecimal only.
pub fn set_sign(&mut self, positive: bool)
please use set_sign_positive instead
bigdecimal only.Sourcepub fn set_sign_positive(&mut self, positive: bool)
Available on non-crate feature bigdecimal only.
pub fn set_sign_positive(&mut self, positive: bool)
bigdecimal only.Sourcepub fn set_sign_negative(&mut self, negative: bool)
Available on non-crate feature bigdecimal only.
pub fn set_sign_negative(&mut self, negative: bool)
bigdecimal only.Sourcepub fn set_scale(&mut self, scale: u32) -> Result<(), Error>
Available on non-crate feature bigdecimal only.
pub fn set_scale(&mut self, scale: u32) -> Result<(), Error>
bigdecimal only.Sourcepub fn rescale(&mut self, scale: u32)
Available on non-crate feature bigdecimal only.
pub fn rescale(&mut self, scale: u32)
bigdecimal only.Modifies the Decimal towards the desired scale, attempting to do so without changing the
underlying number itself.
Setting the scale to something less then the current Decimals scale will
cause the newly created Decimal to perform rounding using the MidpointAwayFromZero strategy.
Scales greater than the maximum precision that can be represented by Decimal will be
automatically rounded to either Self::MAX_SCALE or the maximum precision that can
be represented with the given mantissa.
§Arguments
scale: The desired scale to use for the newDecimalnumber.
§Example
// Rescaling to a higher scale preserves the value
let mut number = dec!(1.123);
assert_eq!(number.scale(), 3);
number.rescale(6);
assert_eq!(number.to_string(), "1.123000");
assert_eq!(number.scale(), 6);
// Rescaling to a lower scale forces the number to be rounded
let mut number = dec!(1.45);
assert_eq!(number.scale(), 2);
number.rescale(1);
assert_eq!(number.to_string(), "1.5");
assert_eq!(number.scale(), 1);
// This function never fails. Consequently, if a scale is provided that is unable to be
// represented using the given mantissa, then the maximum possible scale is used.
let mut number = dec!(11.76470588235294);
assert_eq!(number.scale(), 14);
number.rescale(28);
// A scale of 28 cannot be represented given this mantissa, however it was able to represent
// a number with a scale of 27
assert_eq!(number.to_string(), "11.764705882352940000000000000");
assert_eq!(number.scale(), 27);Sourcepub const fn serialize(&self) -> [u8; 16]
Available on non-crate feature bigdecimal only.
pub const fn serialize(&self) -> [u8; 16]
bigdecimal only.Returns a serialized version of the decimal number. The resulting byte array will have the following representation:
- Bytes 1-4: flags
- Bytes 5-8: lo portion of
m - Bytes 9-12: mid portion of
m - Bytes 13-16: high portion of
m
Sourcepub fn deserialize(bytes: [u8; 16]) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn deserialize(bytes: [u8; 16]) -> Decimal
bigdecimal only.Deserializes the given bytes into a decimal number. The deserialized byte representation must be 16 bytes and adhere to the following convention:
- Bytes 1-4: flags
- Bytes 5-8: lo portion of
m - Bytes 9-12: mid portion of
m - Bytes 13-16: high portion of
m
Sourcepub fn is_negative(&self) -> bool
👎Deprecated since 0.6.3: please use is_sign_negative instead
Available on non-crate feature bigdecimal only.
pub fn is_negative(&self) -> bool
please use is_sign_negative instead
bigdecimal only.Returns true if the decimal is negative.
Sourcepub fn is_positive(&self) -> bool
👎Deprecated since 0.6.3: please use is_sign_positive instead
Available on non-crate feature bigdecimal only.
pub fn is_positive(&self) -> bool
please use is_sign_positive instead
bigdecimal only.Returns true if the decimal is positive.
Sourcepub const fn is_sign_negative(&self) -> bool
Available on non-crate feature bigdecimal only.
pub const fn is_sign_negative(&self) -> bool
bigdecimal only.Returns true if the sign bit of the decimal is negative.
§Example
assert_eq!(true, Decimal::new(-1, 0).is_sign_negative());
assert_eq!(false, Decimal::new(1, 0).is_sign_negative());Sourcepub const fn is_sign_positive(&self) -> bool
Available on non-crate feature bigdecimal only.
pub const fn is_sign_positive(&self) -> bool
bigdecimal only.Returns true if the sign bit of the decimal is positive.
§Example
assert_eq!(false, Decimal::new(-1, 0).is_sign_positive());
assert_eq!(true, Decimal::new(1, 0).is_sign_positive());Sourcepub const fn min_value() -> Decimal
👎Deprecated since 1.12.0: Use the associated constant Decimal::MIN
Available on non-crate feature bigdecimal only.
pub const fn min_value() -> Decimal
Use the associated constant Decimal::MIN
bigdecimal only.Returns the minimum possible number that Decimal can represent.
Sourcepub const fn max_value() -> Decimal
👎Deprecated since 1.12.0: Use the associated constant Decimal::MAX
Available on non-crate feature bigdecimal only.
pub const fn max_value() -> Decimal
Use the associated constant Decimal::MAX
bigdecimal only.Returns the maximum possible number that Decimal can represent.
Sourcepub fn trunc(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn trunc(&self) -> Decimal
bigdecimal only.Returns a new Decimal integral with no fractional portion.
This is a true truncation whereby no rounding is performed.
§Example
let pi = dec!(3.141);
assert_eq!(pi.trunc(), dec!(3));
// Negative numbers are similarly truncated without rounding
let neg = dec!(-1.98765);
assert_eq!(neg.trunc(), Decimal::NEGATIVE_ONE);Sourcepub fn trunc_with_scale(&self, scale: u32) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn trunc_with_scale(&self, scale: u32) -> Decimal
bigdecimal only.Returns a new Decimal with the fractional portion delimited by scale.
This is a true truncation whereby no rounding is performed.
§Example
let pi = dec!(3.141592);
assert_eq!(pi.trunc_with_scale(2), dec!(3.14));
// Negative numbers are similarly truncated without rounding
let neg = dec!(-1.98765);
assert_eq!(neg.trunc_with_scale(1), dec!(-1.9));Sourcepub fn fract(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn fract(&self) -> Decimal
bigdecimal only.Returns a new Decimal representing the fractional portion of the number.
§Example
let pi = Decimal::new(3141, 3);
let fract = Decimal::new(141, 3);
// note that it returns a decimal
assert_eq!(pi.fract(), fract);Sourcepub fn abs(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn abs(&self) -> Decimal
bigdecimal only.Computes the absolute value of self.
§Example
let num = Decimal::new(-3141, 3);
assert_eq!(num.abs().to_string(), "3.141");Sourcepub fn floor(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn floor(&self) -> Decimal
bigdecimal only.Returns the largest integer less than or equal to a number.
§Example
let num = Decimal::new(3641, 3);
assert_eq!(num.floor().to_string(), "3");Sourcepub fn ceil(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn ceil(&self) -> Decimal
bigdecimal only.Returns the smallest integer greater than or equal to a number.
§Example
let num = Decimal::new(3141, 3);
assert_eq!(num.ceil().to_string(), "4");
let num = Decimal::new(3, 0);
assert_eq!(num.ceil().to_string(), "3");Sourcepub fn max(self, other: Decimal) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn max(self, other: Decimal) -> Decimal
bigdecimal only.Returns the maximum of the two numbers.
let x = Decimal::new(1, 0);
let y = Decimal::new(2, 0);
assert_eq!(y, x.max(y));Sourcepub fn min(self, other: Decimal) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn min(self, other: Decimal) -> Decimal
bigdecimal only.Returns the minimum of the two numbers.
let x = Decimal::new(1, 0);
let y = Decimal::new(2, 0);
assert_eq!(x, x.min(y));Sourcepub fn normalize(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn normalize(&self) -> Decimal
bigdecimal only.Strips any trailing zero’s from a Decimal and converts -0 to 0.
§Example
let number = Decimal::from_str("3.100")?;
assert_eq!(number.normalize().to_string(), "3.1");Sourcepub fn normalize_assign(&mut self)
Available on non-crate feature bigdecimal only.
pub fn normalize_assign(&mut self)
bigdecimal only.An in place version of normalize. Strips any trailing zero’s from a Decimal and converts -0 to 0.
§Example
let mut number = Decimal::from_str("3.100")?;
assert_eq!(number.to_string(), "3.100");
number.normalize_assign();
assert_eq!(number.to_string(), "3.1");Sourcepub fn round(&self) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn round(&self) -> Decimal
bigdecimal only.Returns a new Decimal number with no fractional portion (i.e. an integer).
Rounding currently follows “Bankers Rounding” rules. e.g. 6.5 -> 6, 7.5 -> 8
§Example
// Demonstrating bankers rounding...
let number_down = Decimal::new(65, 1);
let number_up = Decimal::new(75, 1);
assert_eq!(number_down.round().to_string(), "6");
assert_eq!(number_up.round().to_string(), "8");Sourcepub fn round_dp_with_strategy(
&self,
dp: u32,
strategy: RoundingStrategy,
) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn round_dp_with_strategy( &self, dp: u32, strategy: RoundingStrategy, ) -> Decimal
bigdecimal only.Returns a new Decimal number with the specified number of decimal points for fractional
portion.
Rounding is performed using the provided RoundingStrategy
§Arguments
dp: the number of decimal points to round to.strategy: theRoundingStrategyto use.
§Example
let tax = dec!(3.4395);
assert_eq!(tax.round_dp_with_strategy(2, RoundingStrategy::MidpointAwayFromZero).to_string(), "3.44");Sourcepub fn round_dp(&self, dp: u32) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn round_dp(&self, dp: u32) -> Decimal
bigdecimal only.Returns a new Decimal number with the specified number of decimal points for fractional portion.
Rounding currently follows “Bankers Rounding” rules. e.g. 6.5 -> 6, 7.5 -> 8
§Arguments
dp: the number of decimal points to round to.
§Example
let pi = dec!(3.1415926535897932384626433832);
assert_eq!(pi.round_dp(2).to_string(), "3.14");Sourcepub fn round_sf(&self, digits: u32) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn round_sf(&self, digits: u32) -> Option<Decimal>
bigdecimal only.Returns Some(Decimal) number rounded to the specified number of significant digits. If
the resulting number is unable to be represented by the Decimal number then None will
be returned.
When the number of significant figures of the Decimal being rounded is greater than the requested
number of significant digits then rounding will be performed using MidpointNearestEven strategy.
§Arguments
digits: the number of significant digits to round to.
§Remarks
A significant figure is determined using the following rules:
- Non-zero digits are always significant.
- Zeros between non-zero digits are always significant.
- Leading zeros are never significant.
- Trailing zeros are only significant if the number contains a decimal point.
§Example
let value = dec!(305.459);
assert_eq!(value.round_sf(0), Some(dec!(0)));
assert_eq!(value.round_sf(1), Some(dec!(300)));
assert_eq!(value.round_sf(2), Some(dec!(310)));
assert_eq!(value.round_sf(3), Some(dec!(305)));
assert_eq!(value.round_sf(4), Some(dec!(305.5)));
assert_eq!(value.round_sf(5), Some(dec!(305.46)));
assert_eq!(value.round_sf(6), Some(dec!(305.459)));
assert_eq!(value.round_sf(7), Some(dec!(305.4590)));
assert_eq!(Decimal::MAX.round_sf(1), None);
let value = dec!(0.012301);
assert_eq!(value.round_sf(3), Some(dec!(0.0123)));Sourcepub fn round_sf_with_strategy(
&self,
digits: u32,
strategy: RoundingStrategy,
) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn round_sf_with_strategy( &self, digits: u32, strategy: RoundingStrategy, ) -> Option<Decimal>
bigdecimal only.Returns Some(Decimal) number rounded to the specified number of significant digits. If
the resulting number is unable to be represented by the Decimal number then None will
be returned.
When the number of significant figures of the Decimal being rounded is greater than the requested
number of significant digits then rounding will be performed using the provided RoundingStrategy.
§Arguments
digits: the number of significant digits to round to.strategy: if required, the rounding strategy to use.
§Remarks
A significant figure is determined using the following rules:
- Non-zero digits are always significant.
- Zeros between non-zero digits are always significant.
- Leading zeros are never significant.
- Trailing zeros are only significant if the number contains a decimal point.
§Example
let value = dec!(305.459);
assert_eq!(value.round_sf_with_strategy(0, RoundingStrategy::ToZero), Some(dec!(0)));
assert_eq!(value.round_sf_with_strategy(1, RoundingStrategy::ToZero), Some(dec!(300)));
assert_eq!(value.round_sf_with_strategy(2, RoundingStrategy::ToZero), Some(dec!(300)));
assert_eq!(value.round_sf_with_strategy(3, RoundingStrategy::ToZero), Some(dec!(305)));
assert_eq!(value.round_sf_with_strategy(4, RoundingStrategy::ToZero), Some(dec!(305.4)));
assert_eq!(value.round_sf_with_strategy(5, RoundingStrategy::ToZero), Some(dec!(305.45)));
assert_eq!(value.round_sf_with_strategy(6, RoundingStrategy::ToZero), Some(dec!(305.459)));
assert_eq!(value.round_sf_with_strategy(7, RoundingStrategy::ToZero), Some(dec!(305.4590)));
assert_eq!(Decimal::MAX.round_sf_with_strategy(1, RoundingStrategy::ToZero), Some(dec!(70000000000000000000000000000)));
let value = dec!(0.012301);
assert_eq!(value.round_sf_with_strategy(3, RoundingStrategy::AwayFromZero), Some(dec!(0.0124)));Sourcepub const fn unpack(&self) -> UnpackedDecimal
Available on non-crate feature bigdecimal only.
pub const fn unpack(&self) -> UnpackedDecimal
bigdecimal only.Convert Decimal to an internal representation of the underlying struct. This is useful
for debugging the internal state of the object.
§Important Disclaimer
This is primarily intended for library maintainers. The internal representation of a
Decimal is considered “unstable” for public use.
§Example
let pi = dec!(3.1415926535897932384626433832);
assert_eq!(format!("{:?}", pi), "3.1415926535897932384626433832");
assert_eq!(format!("{:?}", pi.unpack()), "UnpackedDecimal { \
negative: false, scale: 28, hi: 1703060790, mid: 185874565, lo: 1102470952 \
}");Sourcepub fn from_f32_retain(n: f32) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn from_f32_retain(n: f32) -> Option<Decimal>
bigdecimal only.Parses a 32-bit float into a Decimal number whilst retaining any non-guaranteed precision.
Typically when a float is parsed in Rust Decimal, any excess bits (after ~7.22 decimal points for f32 as per IEEE-754) are removed due to any digits following this are considered an approximation at best. This function bypasses this additional step and retains these excess bits.
§Example
// Usually floats are parsed leveraging float guarantees. i.e. 0.1_f32 => 0.1
assert_eq!("0.1", Decimal::from_f32(0.1_f32).unwrap().to_string());
// Sometimes, we may want to represent the approximation exactly.
assert_eq!("0.100000001490116119384765625", Decimal::from_f32_retain(0.1_f32).unwrap().to_string());Sourcepub fn from_f64_retain(n: f64) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn from_f64_retain(n: f64) -> Option<Decimal>
bigdecimal only.Parses a 64-bit float into a Decimal number whilst retaining any non-guaranteed precision.
Typically when a float is parsed in Rust Decimal, any excess bits (after ~15.95 decimal points for f64 as per IEEE-754) are removed due to any digits following this are considered an approximation at best. This function bypasses this additional step and retains these excess bits.
§Example
// Usually floats are parsed leveraging float guarantees. i.e. 0.1_f64 => 0.1
assert_eq!("0.1", Decimal::from_f64(0.1_f64).unwrap().to_string());
// Sometimes, we may want to represent the approximation exactly.
assert_eq!("0.1000000000000000055511151231", Decimal::from_f64_retain(0.1_f64).unwrap().to_string());Source§impl Decimal
impl Decimal
Sourcepub fn as_i128(&self) -> i128
Available on non-crate feature bigdecimal only.
pub fn as_i128(&self) -> i128
bigdecimal only.Converts this Decimal to an i128, truncating any fractional part.
This is the infallible equivalent of ToPrimitive::to_i128.
Sourcepub fn as_f64(&self) -> f64
Available on non-crate feature bigdecimal only.
pub fn as_f64(&self) -> f64
bigdecimal only.Converts this Decimal to an f64.
This is the infallible equivalent of ToPrimitive::to_f64.
Source§impl Decimal
impl Decimal
Sourcepub fn checked_add(self, other: Decimal) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn checked_add(self, other: Decimal) -> Option<Decimal>
bigdecimal only.Checked addition. Computes self + other, returning None if overflow occurred.
Sourcepub fn saturating_add(self, other: Decimal) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn saturating_add(self, other: Decimal) -> Decimal
bigdecimal only.Saturating addition. Computes self + other, saturating at the relevant upper or lower boundary.
Sourcepub fn checked_mul(self, other: Decimal) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn checked_mul(self, other: Decimal) -> Option<Decimal>
bigdecimal only.Checked multiplication. Computes self * other, returning None if overflow occurred.
Sourcepub fn saturating_mul(self, other: Decimal) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn saturating_mul(self, other: Decimal) -> Decimal
bigdecimal only.Saturating multiplication. Computes self * other, saturating at the relevant upper or lower boundary.
Sourcepub fn checked_sub(self, other: Decimal) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn checked_sub(self, other: Decimal) -> Option<Decimal>
bigdecimal only.Checked subtraction. Computes self - other, returning None if overflow occurred.
Sourcepub fn saturating_sub(self, other: Decimal) -> Decimal
Available on non-crate feature bigdecimal only.
pub fn saturating_sub(self, other: Decimal) -> Decimal
bigdecimal only.Saturating subtraction. Computes self - other, saturating at the relevant upper or lower boundary.
Sourcepub fn checked_div(self, other: Decimal) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn checked_div(self, other: Decimal) -> Option<Decimal>
bigdecimal only.Checked division. Computes self / other, returning None if overflow occurred.
Sourcepub fn checked_rem(self, other: Decimal) -> Option<Decimal>
Available on non-crate feature bigdecimal only.
pub fn checked_rem(self, other: Decimal) -> Option<Decimal>
bigdecimal only.Checked remainder. Computes self % other, returning None if overflow occurred.
Trait Implementations§
Source§impl AddAssign for Decimal
impl AddAssign for Decimal
Source§fn add_assign(&mut self, other: Decimal)
fn add_assign(&mut self, other: Decimal)
+= operation. Read moreSource§impl<'a> AddAssign<&'a Decimal> for &'a mut Decimal
impl<'a> AddAssign<&'a Decimal> for &'a mut Decimal
Source§fn add_assign(&mut self, other: &'a Decimal)
fn add_assign(&mut self, other: &'a Decimal)
+= operation. Read moreSource§impl<'a> AddAssign<&'a Decimal> for Decimal
impl<'a> AddAssign<&'a Decimal> for Decimal
Source§fn add_assign(&mut self, other: &'a Decimal)
fn add_assign(&mut self, other: &'a Decimal)
+= operation. Read moreSource§impl AddAssign<Decimal> for &mut Decimal
impl AddAssign<Decimal> for &mut Decimal
Source§fn add_assign(&mut self, other: Decimal)
fn add_assign(&mut self, other: Decimal)
+= operation. Read moreSource§impl AsRef<Decimal> for NonNegativeDecimal
impl AsRef<Decimal> for NonNegativeDecimal
Source§impl AsRef<Decimal> for PositiveDecimal
impl AsRef<Decimal> for PositiveDecimal
Source§impl CheckedAdd for Decimal
impl CheckedAdd for Decimal
Source§impl CheckedDiv for Decimal
impl CheckedDiv for Decimal
Source§impl CheckedMul for Decimal
impl CheckedMul for Decimal
Source§impl CheckedRem for Decimal
impl CheckedRem for Decimal
Source§impl CheckedSub for Decimal
impl CheckedSub for Decimal
impl Copy for Decimal
Source§impl Decimal128Mantissa for Decimal
impl Decimal128Mantissa for Decimal
Source§impl<'de> Deserialize<'de> for Decimal
Available on non-crate feature serde-str only.
impl<'de> Deserialize<'de> for Decimal
serde-str only.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 for Decimal
impl DivAssign for Decimal
Source§fn div_assign(&mut self, other: Decimal)
fn div_assign(&mut self, other: Decimal)
/= operation. Read moreSource§impl<'a> DivAssign<&'a Decimal> for &'a mut Decimal
impl<'a> DivAssign<&'a Decimal> for &'a mut Decimal
Source§fn div_assign(&mut self, other: &'a Decimal)
fn div_assign(&mut self, other: &'a Decimal)
/= operation. Read moreSource§impl<'a> DivAssign<&'a Decimal> for Decimal
impl<'a> DivAssign<&'a Decimal> for Decimal
Source§fn div_assign(&mut self, other: &'a Decimal)
fn div_assign(&mut self, other: &'a Decimal)
/= operation. Read moreSource§impl DivAssign<Decimal> for &mut Decimal
impl DivAssign<Decimal> for &mut Decimal
Source§fn div_assign(&mut self, other: Decimal)
fn div_assign(&mut self, other: Decimal)
/= operation. Read moreimpl Eq for Decimal
Source§impl From<NonNegativeDecimal> for Decimal
impl From<NonNegativeDecimal> for Decimal
Source§fn from(value: NonNegativeDecimal) -> Self
fn from(value: NonNegativeDecimal) -> Self
Source§impl From<PositiveDecimal> for Decimal
impl From<PositiveDecimal> for Decimal
Source§fn from(value: PositiveDecimal) -> Self
fn from(value: PositiveDecimal) -> Self
Source§impl FromPrimitive for Decimal
impl FromPrimitive for Decimal
Source§fn from_i32(n: i32) -> Option<Decimal>
fn from_i32(n: i32) -> Option<Decimal>
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_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_i128(n: i128) -> Option<Decimal>
fn from_i128(n: i128) -> Option<Decimal>
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_u32(n: u32) -> Option<Decimal>
fn from_u32(n: u32) -> Option<Decimal>
u32 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_u128(n: u128) -> Option<Decimal>
fn from_u128(n: u128) -> Option<Decimal>
u128 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_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_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§impl MulAssign for Decimal
impl MulAssign for Decimal
Source§fn mul_assign(&mut self, other: Decimal)
fn mul_assign(&mut self, other: Decimal)
*= operation. Read moreSource§impl<'a> MulAssign<&'a Decimal> for &'a mut Decimal
impl<'a> MulAssign<&'a Decimal> for &'a mut Decimal
Source§fn mul_assign(&mut self, other: &'a Decimal)
fn mul_assign(&mut self, other: &'a Decimal)
*= operation. Read moreSource§impl<'a> MulAssign<&'a Decimal> for Decimal
impl<'a> MulAssign<&'a Decimal> for Decimal
Source§fn mul_assign(&mut self, other: &'a Decimal)
fn mul_assign(&mut self, other: &'a Decimal)
*= operation. Read moreSource§impl MulAssign<Decimal> for &mut Decimal
impl MulAssign<Decimal> for &mut Decimal
Source§fn mul_assign(&mut self, other: Decimal)
fn mul_assign(&mut self, other: Decimal)
*= operation. Read moreSource§impl Ord for Decimal
impl Ord for Decimal
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialOrd for Decimal
impl PartialOrd for Decimal
Source§impl RemAssign for Decimal
impl RemAssign for Decimal
Source§fn rem_assign(&mut self, other: Decimal)
fn rem_assign(&mut self, other: Decimal)
%= operation. Read moreSource§impl<'a> RemAssign<&'a Decimal> for &'a mut Decimal
impl<'a> RemAssign<&'a Decimal> for &'a mut Decimal
Source§fn rem_assign(&mut self, other: &'a Decimal)
fn rem_assign(&mut self, other: &'a Decimal)
%= operation. Read moreSource§impl<'a> RemAssign<&'a Decimal> for Decimal
impl<'a> RemAssign<&'a Decimal> for Decimal
Source§fn rem_assign(&mut self, other: &'a Decimal)
fn rem_assign(&mut self, other: &'a Decimal)
%= operation. Read moreSource§impl RemAssign<Decimal> for &mut Decimal
impl RemAssign<Decimal> for &mut Decimal
Source§fn rem_assign(&mut self, other: Decimal)
fn rem_assign(&mut self, other: Decimal)
%= operation. Read moreSource§impl Serialize for Decimal
Available on non-crate feature serde-float only.
impl Serialize for Decimal
serde-float only.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 Signed for Decimal
impl Signed for Decimal
Source§fn abs_sub(&self, other: &Decimal) -> Decimal
fn abs_sub(&self, other: &Decimal) -> Decimal
Source§fn is_positive(&self) -> bool
fn is_positive(&self) -> bool
Source§fn is_negative(&self) -> bool
fn is_negative(&self) -> bool
Source§impl SubAssign for Decimal
impl SubAssign for Decimal
Source§fn sub_assign(&mut self, other: Decimal)
fn sub_assign(&mut self, other: Decimal)
-= operation. Read moreSource§impl<'a> SubAssign<&'a Decimal> for &'a mut Decimal
impl<'a> SubAssign<&'a Decimal> for &'a mut Decimal
Source§fn sub_assign(&mut self, other: &'a Decimal)
fn sub_assign(&mut self, other: &'a Decimal)
-= operation. Read moreSource§impl<'a> SubAssign<&'a Decimal> for Decimal
impl<'a> SubAssign<&'a Decimal> for Decimal
Source§fn sub_assign(&mut self, other: &'a Decimal)
fn sub_assign(&mut self, other: &'a Decimal)
-= operation. Read moreSource§impl SubAssign<Decimal> for &mut Decimal
impl SubAssign<Decimal> for &mut Decimal
Source§fn sub_assign(&mut self, other: Decimal)
fn sub_assign(&mut self, other: Decimal)
-= operation. Read moreSource§impl ToPrimitive for Decimal
impl ToPrimitive for Decimal
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_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_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_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_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_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§fn to_u16(&self) -> Option<u16>
fn to_u16(&self) -> Option<u16>
self to a u16. If the value cannot be
represented by a u16, then None is returned.Source§impl TryFrom<&str> for Decimal
Try to convert a &str into a Decimal.
impl TryFrom<&str> for Decimal
Try to convert a &str into a Decimal.
Can fail if the value is out of range for Decimal.
Source§impl TryFrom<Decimal> for NonNegativeDecimal
impl TryFrom<Decimal> for NonNegativeDecimal
Source§impl TryFrom<Decimal> for PositiveDecimal
impl TryFrom<Decimal> for PositiveDecimal
Source§impl TryFrom<f32> for Decimal
Try to convert a f32 into a Decimal.
impl TryFrom<f32> for Decimal
Try to convert a f32 into a Decimal.
Can fail if the value is out of range for Decimal.
Source§impl TryFrom<f64> for Decimal
Try to convert a f64 into a Decimal.
impl TryFrom<f64> for Decimal
Try to convert a f64 into a Decimal.
Can fail if the value is out of range for Decimal.