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
impl 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