Struct icu_plurals::operands::PluralOperands
source · pub struct PluralOperands {
pub(crate) i: u64,
pub(crate) v: usize,
pub(crate) w: usize,
pub(crate) f: u64,
pub(crate) t: u64,
pub(crate) c: usize,
}
Expand description
A full plural operands representation of a number. See CLDR Plural Rules for complete operands description. Plural operands in compliance with CLDR Plural Rules.
See full operands description.
§Data Types
The following types can be converted to PluralOperands
:
- Integers, signed and unsigned
- Strings representing an arbitrary-precision decimal
FixedDecimal
This crate does not support selection from a floating-point number, because floats are not
capable of carrying trailing zeros, which are required for proper plural rule selection. For
example, in English, “1 star” has a different plural form than “1.0 stars”, but this
distinction cannot be represented using a float. Clients should use FixedDecimal
instead.
§Examples
From int
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 2,
v: 0,
w: 0,
f: 0,
t: 0,
c: 0,
}),
PluralOperands::from(2_usize)
);
From &str
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
Ok(PluralOperands::from(RawPluralOperands {
i: 123,
v: 2,
w: 2,
f: 45,
t: 45,
c: 0,
})),
"123.45".parse()
);
From FixedDecimal
use fixed_decimal::FixedDecimal;
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralOperands;
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 123,
v: 2,
w: 2,
f: 45,
t: 45,
c: 0,
}),
(&FixedDecimal::from(12345).multiplied_pow10(-2)).into()
);
Fields§
§i: u64
Integer value of input
v: usize
Number of visible fraction digits with trailing zeros
w: usize
Number of visible fraction digits without trailing zeros
f: u64
Visible fraction digits with trailing zeros
t: u64
Visible fraction digits without trailing zeros
c: usize
Exponent of the power of 10 used in compact decimal formatting
Implementations§
source§impl PluralOperands
impl PluralOperands
fn from_significand_and_exponent(dec: &FixedDecimal, exp: u8) -> PluralOperands
Trait Implementations§
source§impl Clone for PluralOperands
impl Clone for PluralOperands
source§fn clone(&self) -> PluralOperands
fn clone(&self) -> PluralOperands
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for PluralOperands
impl Debug for PluralOperands
source§impl Default for PluralOperands
impl Default for PluralOperands
source§fn default() -> PluralOperands
fn default() -> PluralOperands
source§impl From<&CompactDecimal> for PluralOperands
impl From<&CompactDecimal> for PluralOperands
source§fn from(compact: &CompactDecimal) -> Self
fn from(compact: &CompactDecimal) -> Self
Converts a fixed_decimal::CompactDecimal
to PluralOperands
. Retains at most 18
digits each from the integer and fraction parts.
§Examples
use fixed_decimal::CompactDecimal;
use fixed_decimal::FixedDecimal;
use icu::locid::locale;
use icu::plurals::rules::RawPluralOperands;
use icu::plurals::PluralCategory;
use icu::plurals::PluralOperands;
use icu::plurals::PluralRules;
let fixed_decimal = "1000000.20".parse::<FixedDecimal>().unwrap();
let compact_decimal = "1.00000020c6".parse::<CompactDecimal>().unwrap();
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 1000000,
v: 2,
w: 1,
f: 20,
t: 2,
c: 0,
}),
PluralOperands::from(&fixed_decimal)
);
assert_eq!(
PluralOperands::from(RawPluralOperands {
i: 1000000,
v: 2,
w: 1,
f: 20,
t: 2,
c: 6,
}),
PluralOperands::from(&compact_decimal)
);
let rules = PluralRules::try_new_cardinal(&locale!("fr").into()).unwrap();
assert_eq!(rules.category_for(&fixed_decimal), PluralCategory::Other);
assert_eq!(rules.category_for(&compact_decimal), PluralCategory::Many);
source§impl From<&FixedDecimal> for PluralOperands
impl From<&FixedDecimal> for PluralOperands
source§fn from(dec: &FixedDecimal) -> Self
fn from(dec: &FixedDecimal) -> Self
Converts a fixed_decimal::FixedDecimal
to PluralOperands
. Retains at most 18
digits each from the integer and fraction parts.
source§impl From<i128> for PluralOperands
impl From<i128> for PluralOperands
source§impl From<i16> for PluralOperands
impl From<i16> for PluralOperands
source§impl From<i32> for PluralOperands
impl From<i32> for PluralOperands
source§impl From<i64> for PluralOperands
impl From<i64> for PluralOperands
source§impl From<i8> for PluralOperands
impl From<i8> for PluralOperands
source§impl From<isize> for PluralOperands
impl From<isize> for PluralOperands
source§impl From<u128> for PluralOperands
impl From<u128> for PluralOperands
source§impl From<u16> for PluralOperands
impl From<u16> for PluralOperands
source§impl From<u32> for PluralOperands
impl From<u32> for PluralOperands
source§impl From<u64> for PluralOperands
impl From<u64> for PluralOperands
source§impl From<u8> for PluralOperands
impl From<u8> for PluralOperands
source§impl From<usize> for PluralOperands
impl From<usize> for PluralOperands
source§impl FromStr for PluralOperands
impl FromStr for PluralOperands
source§impl PartialEq for PluralOperands
impl PartialEq for PluralOperands
source§fn eq(&self, other: &PluralOperands) -> bool
fn eq(&self, other: &PluralOperands) -> bool
self
and other
values to be equal, and is used
by ==
.