pub struct VariantDecimal16 {
integer: i128,
scale: u8,
}Expand description
Represents an 16-byte decimal value in the Variant format.
This struct stores a decimal number using a 128-bit signed integer for the coefficient and an 8-bit unsigned integer for the scale (number of decimal places). Its precision is between 19 and 38 digits.
For valid precision and scale values, see the Variant specification:
§Example: Create a VariantDecimal16
// Create a value representing the decimal 12345678901234567.890
let decimal = VariantDecimal16::try_new(12345678901234567890, 3).unwrap();Fields§
§integer: i128§scale: u8Implementations§
Source§impl VariantDecimal16
impl VariantDecimal16
Sourcepub const MAX_PRECISION: u8 = arrow_schema::DECIMAL128_MAX_PRECISION
pub const MAX_PRECISION: u8 = arrow_schema::DECIMAL128_MAX_PRECISION
Maximum number of significant digits (38 for 16-byte decimals)
Source§impl VariantDecimal16
impl VariantDecimal16
Sourcepub fn try_new(integer: i128, scale: u8) -> Result<Self, ArrowError>
pub fn try_new(integer: i128, scale: u8) -> Result<Self, ArrowError>
Attempts to create a new instance of this decimal type, failing if the value is too wide or the scale is too large.
Sourcepub fn integer(&self) -> i128
pub fn integer(&self) -> i128
Returns the unscaled integer value of the decimal.
For example, if the decimal is 123.45, this will return 12345.
Sourcepub fn scale(&self) -> u8
pub fn scale(&self) -> u8
Returns the scale of the decimal (how many digits after the decimal point).
For example, if the decimal is 123.45, this will return 2.
Sourcepub fn as_integer(&self) -> Option<i128>
pub fn as_integer(&self) -> Option<i128>
Returns Some(i128) if scale is zero or integer of the decimal is divisible by 10^scale,
None for other values.
§Examples
use parquet_variant::VariantDecimal16;
//Return the integer if scale is 0
let d1 = VariantDecimal16::try_new(123, 0).unwrap();
assert_eq!(d1.as_integer(), Some(123));
// or if the integer is divisible by 10^scale
let d2 = VariantDecimal16::try_new(100, 2).unwrap();
assert_eq!(d2.as_integer(), Some(1));
// or the integer is negative and divisible by 10^scale
let d3 = VariantDecimal16::try_new(-100, 2).unwrap();
assert_eq!(d3.as_integer(), Some(-1));
// or if the integer is 0
let d4 = VariantDecimal16::try_new(0, 4).unwrap();
assert_eq!(d4.as_integer(), Some(0));
// but not if the integer is not divisible by 10^scale
let d5 = VariantDecimal16::try_new(123, 2).unwrap();
assert_eq!(d5.as_integer(), None);
// or the integer is negative and not divisible by 10^scale
let d6 = VariantDecimal16::try_new(-123, 2).unwrap();
assert_eq!(d6.as_integer(), None);Trait Implementations§
Source§impl Clone for VariantDecimal16
impl Clone for VariantDecimal16
Source§fn clone(&self) -> VariantDecimal16
fn clone(&self) -> VariantDecimal16
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for VariantDecimal16
Source§impl Debug for VariantDecimal16
impl Debug for VariantDecimal16
Source§impl Display for VariantDecimal16
impl Display for VariantDecimal16
Source§impl From<VariantDecimal4> for VariantDecimal16
impl From<VariantDecimal4> for VariantDecimal16
Source§fn from(decimal: VariantDecimal4) -> Self
fn from(decimal: VariantDecimal4) -> Self
Source§impl From<VariantDecimal8> for VariantDecimal16
impl From<VariantDecimal8> for VariantDecimal16
Source§fn from(decimal: VariantDecimal8) -> Self
fn from(decimal: VariantDecimal8) -> Self
Source§impl From<VariantDecimal16> for Variant<'_, '_>
impl From<VariantDecimal16> for Variant<'_, '_>
Source§fn from(value: VariantDecimal16) -> Self
fn from(value: VariantDecimal16) -> Self
Source§impl PartialEq for VariantDecimal16
impl PartialEq for VariantDecimal16
impl StructuralPartialEq for VariantDecimal16
Source§impl TryFrom<VariantDecimal16> for VariantDecimal4
impl TryFrom<VariantDecimal16> for VariantDecimal4
Source§impl TryFrom<VariantDecimal16> for VariantDecimal8
impl TryFrom<VariantDecimal16> for VariantDecimal8
Source§impl TryFrom<i128> for VariantDecimal16
impl TryFrom<i128> for VariantDecimal16
Source§impl VariantDecimalType for VariantDecimal16
impl VariantDecimalType for VariantDecimal16
Source§const MAX_PRECISION: u8 = Self::MAX_PRECISION
const MAX_PRECISION: u8 = Self::MAX_PRECISION
Source§const MAX_UNSCALED_VALUE: i128
const MAX_UNSCALED_VALUE: i128
Self::MAX_PRECISION digits.Source§fn try_new(integer: i128, scale: u8) -> Result<Self, ArrowError>
fn try_new(integer: i128, scale: u8) -> Result<Self, ArrowError>
MAX_PRECISION. Read more