Format numbers
This commit is contained in:
parent
d95dd4de50
commit
a9d29e6518
|
@ -1143,6 +1143,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cbc7fdec9d7f6671a3ebb3282c969962aba67c49f6abac5311959b65cafabc10"
|
checksum = "cbc7fdec9d7f6671a3ebb3282c969962aba67c49f6abac5311959b65cafabc10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"displaydoc",
|
"displaydoc",
|
||||||
|
"ryu",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"writeable",
|
"writeable",
|
||||||
]
|
]
|
||||||
|
@ -2714,6 +2715,7 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"chrono-tz",
|
"chrono-tz",
|
||||||
|
"fixed_decimal",
|
||||||
"fluent-ergonomics",
|
"fluent-ergonomics",
|
||||||
"icu",
|
"icu",
|
||||||
"icu_locid",
|
"icu_locid",
|
||||||
|
|
|
@ -8,6 +8,7 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
chrono = { version = "0.4" }
|
chrono = { version = "0.4" }
|
||||||
chrono-tz = { version = "0.8" }
|
chrono-tz = { version = "0.8" }
|
||||||
|
fixed_decimal = { version = "0.5.5", features = [ "ryu" ] }
|
||||||
fluent-ergonomics = { path = "../fluent-ergonomics" }
|
fluent-ergonomics = { path = "../fluent-ergonomics" }
|
||||||
icu = { version = "1" }
|
icu = { version = "1" }
|
||||||
icu_locid = { version = "1" }
|
icu_locid = { version = "1" }
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use chrono::{Datelike, FixedOffset, NaiveDate, TimeZone, Timelike};
|
use chrono::{Datelike, NaiveDate, Timelike};
|
||||||
use chrono_tz::{OffsetName, Tz};
|
use chrono_tz::{Tz};
|
||||||
|
use fixed_decimal::{FixedDecimal};
|
||||||
use icu::{
|
use icu::{
|
||||||
datetime::options::length,
|
datetime::options::length,
|
||||||
timezone::{CustomTimeZone, GmtOffset},
|
decimal::{FixedDecimalFormatter},
|
||||||
};
|
};
|
||||||
use icu_locid::{locale, Locale};
|
use icu_locid::{Locale};
|
||||||
use icu_provider::DataLocale;
|
use icu_provider::DataLocale;
|
||||||
use std::str::FromStr;
|
|
||||||
use sys_locale::get_locale;
|
use sys_locale::get_locale;
|
||||||
|
|
||||||
|
pub use fixed_decimal::FloatPrecision;
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct L10N {
|
pub struct L10N {
|
||||||
locale: Locale,
|
locale: Locale,
|
||||||
|
@ -137,8 +139,15 @@ impl L10N {
|
||||||
formatter.format_to_string(&icu_date.to_any()).unwrap()
|
formatter.format_to_string(&icu_date.to_any()).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_f64(&self, value: f64) -> String {
|
fn format_f64(&self, value: f64, precision: FloatPrecision) -> String {
|
||||||
unimplemented!()
|
let fdf = FixedDecimalFormatter::try_new(
|
||||||
|
&self.locale.clone().into(),
|
||||||
|
Default::default()
|
||||||
|
).expect("locale should be present");
|
||||||
|
|
||||||
|
let number = FixedDecimal::try_from_f64(value, precision).unwrap();
|
||||||
|
|
||||||
|
fdf.format_to_string(&FixedDecimal::try_from_f64(value, precision).unwrap())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,6 +268,25 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn it_formats_a_number_according_to_locale() {
|
fn it_formats_a_number_according_to_locale() {
|
||||||
unimplemented!()
|
let mut l10n = ref_l10n();
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
l10n.format_f64(100.4, FloatPrecision::Floating),
|
||||||
|
"100.4",
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
l10n.format_f64(15000.4, FloatPrecision::Floating),
|
||||||
|
"15,000.4",
|
||||||
|
);
|
||||||
|
|
||||||
|
l10n.set_locale("de-DE".to_owned());
|
||||||
|
assert_eq!(
|
||||||
|
l10n.format_f64(100.4, FloatPrecision::Floating),
|
||||||
|
"100,4",
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
l10n.format_f64(15000.4, FloatPrecision::Floating),
|
||||||
|
"15.000,4",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue