Description
When using fluent inside the Rust compiler we came across an unfortunate limitation, fluent and more precisely FluentNumber
doesn't support the full precision of all numbers it accepts.
fluent-rs/fluent-bundle/src/types/number.rs
Lines 125 to 129 in a2cef6b
This is due to the internal representation of number which uses a f64
which can't fully represent a i64
and u64
. For example i64::MAX
(9223372036854775807) would be 92233720368547760000, notice the last 4 character 5807
!= 0000
.
This is particularly a problem for rustc
because we print the limits of numbers, which would be off if done using f64
. We workaround it using a string for numbers between -100..=100 (to still be able to select on them); but this isn't a solution.
One way I could see fluent fix this issue would be to use a representation like this:
#[derive(Debug, PartialEq, Clone)]
pub enum FluentNumberValue {
Float(f64),
SignedInteger(i128),
UnsignedInteger(u128),
}