Skip to main content

Decimal64NoScale

Struct Decimal64NoScale 

Source
pub struct Decimal64NoScale { /* private fields */ }
Expand description

A fixed-precision decimal stored as a raw 64-bit integer.

§Design

Unlike Decimal64 which embeds scale, Decimal64NoScale stores only the mantissa. This provides:

  • 2 more digits of precision (18 vs 16)
  • Correct aggregates (sum/min/max work with raw integer math)
  • Columnar storage compatibility (scale in metadata, not per-value)

§Aggregates

stored_values = [a*10^s, b*10^s, c*10^s]
SUM(stored_values) = (a+b+c) * 10^s
actual_sum = SUM / 10^s = a+b+c  ✓

§Special Values

Special values use sentinel i64 values (at the extremes of the range):

  • i64::MIN: NaN (sorts highest per PostgreSQL semantics)
  • i64::MIN + 1: -Infinity (sorts lowest)
  • i64::MAX: +Infinity

Implementations§

Source§

impl Decimal64NoScale

Source

pub fn new(s: &str, scale: i32) -> Result<Self, DecimalError>

Creates a Decimal64NoScale from a string with the given scale.

§Arguments
  • s - The decimal string (e.g., “123.45”)
  • scale - The number of decimal places to store
§Examples
use decimal_bytes::Decimal64NoScale;

let d = Decimal64NoScale::new("123.45", 2).unwrap();
assert_eq!(d.value(), 12345);
assert_eq!(d.to_string_with_scale(2), "123.45");
Source

pub const fn from_raw(value: i64) -> Self

Creates a Decimal64NoScale from a raw i64 value.

Use this when you already have the scaled integer value.

§Examples
use decimal_bytes::Decimal64NoScale;

let d = Decimal64NoScale::from_raw(12345);
assert_eq!(d.value(), 12345);
assert_eq!(d.to_string_with_scale(2), "123.45");
Source

pub const fn infinity() -> Self

Creates positive infinity.

Source

pub const fn neg_infinity() -> Self

Creates negative infinity.

Source

pub const fn nan() -> Self

Creates NaN (Not a Number).

Follows PostgreSQL semantics: NaN == NaN is true.

Source

pub const fn value(&self) -> i64

Returns the raw i64 value.

For normal values, this is actual_value * 10^scale. For special values, this returns the sentinel value.

Source

pub const fn raw(&self) -> i64

Returns the raw i64 value (alias for columnar storage compatibility).

Source

pub fn is_zero(&self) -> bool

Returns true if this value is zero.

Source

pub fn is_negative(&self) -> bool

Returns true if this value is negative (excluding special values).

Source

pub fn is_positive(&self) -> bool

Returns true if this value is positive (excluding special values).

Source

pub fn is_pos_infinity(&self) -> bool

Returns true if this value is positive infinity.

Source

pub fn is_neg_infinity(&self) -> bool

Returns true if this value is negative infinity.

Source

pub fn is_infinity(&self) -> bool

Returns true if this value is positive or negative infinity.

Source

pub fn is_nan(&self) -> bool

Returns true if this value is NaN (Not a Number).

Source

pub fn is_special(&self) -> bool

Returns true if this is a special value (Infinity or NaN).

Source

pub fn is_finite(&self) -> bool

Returns true if this is a finite number (not Infinity or NaN).

Source

pub fn to_string_with_scale(&self, scale: i32) -> String

Formats the value as a decimal string using the given scale.

§Arguments
  • scale - The scale to use for formatting
§Examples
use decimal_bytes::Decimal64NoScale;

let d = Decimal64NoScale::from_raw(12345);
assert_eq!(d.to_string_with_scale(2), "123.45");
assert_eq!(d.to_string_with_scale(3), "12.345");
assert_eq!(d.to_string_with_scale(0), "12345");
Source

pub fn to_be_bytes(&self) -> [u8; 8]

Returns the 8-byte big-endian representation.

Source

pub fn from_be_bytes(bytes: [u8; 8]) -> Self

Creates a Decimal64NoScale from big-endian bytes.

Source

pub fn to_decimal(&self, scale: i32) -> Decimal

Converts to the variable-length Decimal type.

Note: This requires a scale to format correctly.

Source

pub fn from_decimal(decimal: &Decimal, scale: i32) -> Result<Self, DecimalError>

Creates a Decimal64NoScale from a Decimal with the specified scale.

Source

pub const fn min_value() -> Self

Returns the minimum finite value.

Source

pub const fn max_value() -> Self

Returns the maximum finite value.

Source

pub fn cmp_with_scale( &self, other: &Self, self_scale: i32, other_scale: i32, ) -> Ordering

Compares two values, normalizing scales if different.

This is needed when comparing values that might have been stored with different scales in different columns.

Trait Implementations§

Source§

impl Clone for Decimal64NoScale

Source§

fn clone(&self) -> Decimal64NoScale

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Decimal64NoScale

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Decimal64NoScale

Source§

fn default() -> Decimal64NoScale

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Decimal64NoScale

Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Decimal64NoScale

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Display without scale (shows raw value).

For formatted output, use to_string_with_scale().

Source§

impl From<i32> for Decimal64NoScale

Source§

fn from(value: i32) -> Self

Converts to this type from the input type.
Source§

impl From<i64> for Decimal64NoScale

Source§

fn from(value: i64) -> Self

Converts to this type from the input type.
Source§

impl Hash for Decimal64NoScale

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for Decimal64NoScale

Source§

fn cmp(&self, other: &Self) -> Ordering

Compares values assuming same scale.

For cross-scale comparison, use cmp_with_scale().

1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Decimal64NoScale

Source§

fn eq(&self, other: &Decimal64NoScale) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Decimal64NoScale

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for Decimal64NoScale

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for Decimal64NoScale

Source§

impl Eq for Decimal64NoScale

Source§

impl StructuralPartialEq for Decimal64NoScale

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,