Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support full precision of all numbers #337

Open
Urgau opened this issue Jan 27, 2024 · 1 comment
Open

Support full precision of all numbers #337

Urgau opened this issue Jan 27, 2024 · 1 comment
Labels
bug crate:fluent-bundle Issues related to fluent-bundle crate

Comments

@Urgau
Copy link

Urgau commented Jan 27, 2024

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.

#[derive(Debug, PartialEq, Clone)]
pub struct FluentNumber {
pub value: f64,
pub options: FluentNumberOptions,
}

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),
}
@JasperDeSutter
Copy link
Contributor

This could probably be solved by using https://docs.rs/fixed_decimal/0.5.5/fixed_decimal as the number representation, which supports arbitrary precision.
Combined with the open PRs to switch to ICU4X for plurals and number formatting, it should also remove the lossy internal conversion from f64 to FixedDecimal.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug crate:fluent-bundle Issues related to fluent-bundle crate
Projects
None yet
Development

No branches or pull requests

3 participants