pub struct VariantDecimal4 {
integer: i32,
scale: u8,
}Expand description
Represents a 4-byte decimal value in the Variant format.
This struct stores a decimal number using a 32-bit signed integer for the coefficient and an 8-bit unsigned integer for the scale (number of decimal places). Its precision is limited to 9 digits.
For valid precision and scale values, see the Variant specification: https://github.com/apache/parquet-format/blob/87f2c8bf77eefb4c43d0ebaeea1778bd28ac3609/VariantEncoding.md?plain=1#L418-L420
§Example: Create a VariantDecimal4
// Create a value representing the decimal 123.4567
let decimal = VariantDecimal4::try_new(1234567, 4).expect("Failed to create decimal");Fields§
§integer: i32§scale: u8Implementations§
Source§impl VariantDecimal4
impl VariantDecimal4
Sourcepub const MAX_PRECISION: u8 = arrow_schema::DECIMAL32_MAX_PRECISION
pub const MAX_PRECISION: u8 = arrow_schema::DECIMAL32_MAX_PRECISION
Maximum number of significant digits (9 for 4-byte decimals)
Source§impl VariantDecimal4
impl VariantDecimal4
Sourcepub fn try_new(integer: i32, scale: u8) -> Result<Self, ArrowError>
pub fn try_new(integer: i32, 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) -> i32
pub fn integer(&self) -> i32
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<i32>
pub fn as_integer(&self) -> Option<i32>
Returns Some(i32) if scale is zero or integer of the decimal is divisible by 10^scale,
None for other values.
§Examples
use parquet_variant::VariantDecimal4;
//Return the integer if scale is 0
let d1 = VariantDecimal4::try_new(123, 0).unwrap();
assert_eq!(d1.as_integer(), Some(123));
// or if the integer is divisible by 10^scale
let d2 = VariantDecimal4::try_new(100, 2).unwrap();
assert_eq!(d2.as_integer(), Some(1));
// or the integer is negative and divisible by 10^scale
let d3 = VariantDecimal4::try_new(-100, 2).unwrap();
assert_eq!(d3.as_integer(), Some(-1));
// or if the integer is 0
let d4 = VariantDecimal4::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 = VariantDecimal4::try_new(123, 2).unwrap();
assert_eq!(d5.as_integer(), None);
// or the integer is negative and not divisible by 10^scale
let d6 = VariantDecimal4::try_new(-123, 2).unwrap();
assert_eq!(d6.as_integer(), None);Trait Implementations§
Source§impl Clone for VariantDecimal4
impl Clone for VariantDecimal4
Source§fn clone(&self) -> VariantDecimal4
fn clone(&self) -> VariantDecimal4
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 VariantDecimal4
Source§impl Debug for VariantDecimal4
impl Debug for VariantDecimal4
Source§impl Display for VariantDecimal4
impl Display for VariantDecimal4
Source§impl From<VariantDecimal4> for VariantDecimal8
impl From<VariantDecimal4> for VariantDecimal8
Source§fn from(decimal: VariantDecimal4) -> Self
fn from(decimal: VariantDecimal4) -> Self
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<VariantDecimal4> for Variant<'_, '_>
impl From<VariantDecimal4> for Variant<'_, '_>
Source§fn from(value: VariantDecimal4) -> Self
fn from(value: VariantDecimal4) -> Self
Source§impl PartialEq for VariantDecimal4
impl PartialEq for VariantDecimal4
impl StructuralPartialEq for VariantDecimal4
Source§impl TryFrom<VariantDecimal8> for VariantDecimal4
impl TryFrom<VariantDecimal8> for VariantDecimal4
Source§impl TryFrom<VariantDecimal16> for VariantDecimal4
impl TryFrom<VariantDecimal16> for VariantDecimal4
Source§impl TryFrom<i32> for VariantDecimal4
impl TryFrom<i32> for VariantDecimal4
Source§impl VariantDecimalType for VariantDecimal4
impl VariantDecimalType for VariantDecimal4
Source§const MAX_PRECISION: u8 = Self::MAX_PRECISION
const MAX_PRECISION: u8 = Self::MAX_PRECISION
Source§const MAX_UNSCALED_VALUE: i32
const MAX_UNSCALED_VALUE: i32
Self::MAX_PRECISION digits.Source§fn try_new(integer: i32, scale: u8) -> Result<Self, ArrowError>
fn try_new(integer: i32, scale: u8) -> Result<Self, ArrowError>
MAX_PRECISION. Read more