| Crates.io | formato |
| lib.rs | formato |
| version | 0.3.0 |
| created_at | 2022-11-11 08:06:34.880984+00 |
| updated_at | 2025-04-19 13:43:00.223298+00 |
| description | Convert numbers to string with customizable format |
| homepage | https://github.com/griccardos/formato/ |
| repository | https://github.com/griccardos/formato/ |
| max_upload_size | |
| id | 712732 |
| size | 53,388 |
Easily format numbers into string representation
Works for integers (u8-u128 and i8-i128) and floats (f32, f64)
Allows you to specify location of thousands separator, number of decimals, different format for positive, negative and zero values. e.g.
1,000,0000012(4 234.56)Similar to numerical formatting in Excel and C#
use formato::{Formato,FormatOptions};
assert_eq!("001", 1.formato("000"));
assert_eq!("1,234", 1234.formato("#,###"));
assert_eq!("1,234.56", (1234.5632).formato("N2"));
assert_eq!("(1,234)", (-1234).formato("#,##0 ;(#,##0);-"));
let ops=FormatOptions::default()
.with_thousands(" ")
.with_decimal(",");
assert_eq!("1 234,32", 1234.321.formato_ops("#,###.00",&ops));
See below for more examples
This is still a very early release so there may be bugs. If you find any bugs, please open an issue, or create a PR. There has been almost no performance tuning yet, first want to stabilise functionality.
assert_eq!("001", 1.formato("000"));
assert_eq!("1", 1.formato("###"));
assert_eq!("01", 1.formato("#00"));
where 'd' is the optional number of decimals. when left out, it defaults to 2
let num:f64 = 1234.1234;
assert_eq!("1234.12", num.formato("F"));
assert_eq!("1234.1", num.formato("F1"));
assert_eq!("1,234.12", num.formato("N"));
assert_eq!("1,234.1", num.formato("N1"));
where a decimal part is left out, it rounds if the next digit is 5 or above
assert_eq!("1,234.57", 1234.5678.formato("#,###.##"));
assert_eq!("$ 10,000.00", 9999.996.formato("$ #,###.##"));
assert_eq!("1,234", 1234.formato("#,###"));
//pattern is repeated for more significant digits
assert_eq!("1,000,000", 1_000_000.formato("#,###"));
//formato ignores characters other than #0,. and includes them as is
assert_eq!("$ 1,234.00", 1234.formato("$ #,###.00"));
assert_eq!("oh wow!❤1,234✔", 1234.formato("oh wow!❤#,###✔"));
"," sets the grouping location (repeats the last pattern found on int part. decimal part it acts as normal character)
let ops=FormatOptions::default()
.with_thousands(" ")
.with_decimal(",");
assert_eq!("1 234,00", 1234.formato_ops("#,###.00",&ops));
";" optionally separate positive, negative, zero formats. e.g. 0;(0);-
let my_format = "#,###.00 ;(#,###.00);- ";
assert_eq!("1,234.57 ", 1234.567.formato(my_format));
assert_eq!("(1,234.57)", (-1234.567).formato(my_format));
assert_eq!("- ", 0.formato(my_format));