| Crates.io | format_num_pattern |
| lib.rs | format_num_pattern |
| version | 0.9.3 |
| created_at | 2024-04-27 18:00:49.545498+00 |
| updated_at | 2024-10-05 01:07:30.288359+00 |
| description | format numbers according to a pattern string; localized |
| homepage | |
| repository | https://github.com/thscharler/format_num_pattern |
| max_upload_size | |
| id | 1222790 |
| size | 73,863 |
This one uses a pattern string instead of the format! style.
Localization is done with [NumberSymbols]. The locale-data is provided by pure_rust_locales.
A number for this library is any type that is LowerExp + Display.
The conversion to string is done via format!("{}") and format!("{:e}"),
this string is split at '.' and 'e' and pattern is applied.
The digits themselves are not validated to safe time.
Parsing needs FromStr.
parse_sym() only takes the symbols and removes everything from the
input, that is not a digit or the decimal-separator. The result is handed
to FromStr.parse_fmt() takes a NumberFormat and requires an exact match for
the pattern. The recognized parts are reassembled in the correct order
and handed to FromStr.use format_num_pattern::Locale::de_AT_euro;
use format_num_pattern as num;
use format_num_pattern::{NumberFormat, NumberSymbols};
// formats accordingly, uses the default symbols.
let s = num::format(4561.2234, "###,##0.00").expect("works");
assert_eq!(s, " 4,561.22");
// uses symbols
let sym = NumberSymbols::monetary(de_AT_euro);
let s = num::formats(4561.2234, "$ ###,##0.00", &sym).expect("works");
assert_eq!(s.as_str(), "€ 4\u{202f}561,22");
// prepared format
let sym = NumberSymbols::monetary(de_AT_euro);
let m2 = NumberFormat::news("$ ###,##0.00", sym).expect("works");
let s = m2.fmt(4561.2234).expect("works");
assert_eq!(s.as_str(), "€ 4\u{202f}561,22");
// postfix fmt using the FormatNumber trait
use format_num_pattern::DisplayNumber;
println!("combined output: {}", 4561.2234f64.fmt(&m2));
The following patterns are recognized:
0 - digit or 09 - digit or space# - digit or sign or space- - sign; show space for positive+ - sign; show '+' for positive and '-' for negative. not localized.. - decimal separator: - decimal separator, always shown, - grouping separator. Might be completely absent, if the FormatSymbols say so.E - upper case exponente - lower case exponent - space can be used as separator\ - all ascii characters (ascii 32-128!) are reserved and must be escaped._ - other unicode characters can be used without escaping.The simple benchmark that I ran gives a time of