3个版本
0.9.2 | 2024年5月8日 |
---|---|
0.9.1 | 2024年4月27日 |
0.9.0 | 2024年4月27日 |
#69 in 值格式化
103 个月下载量
在 6 个crate中使用 (3 直接使用)
58KB
1K SLoC
数字格式化
这个使用模式字符串而不是format!
风格。
本地化
本地化使用[NumberSymbols]。地区数据由pure_rust_locales提供。
要求
此库中的数字是任何类型,它是LowerExp
+ Display
。字符串转换是通过format!("{}")
和format!("{:e}")
完成的,这个字符串在'.'和'e'处分割,并应用模式。数字本身没有进行验证,以节省时间。
解析需要FromStr
。
parse_sym()
只接受符号,并从输入中删除所有不是数字或小数分隔符的内容。然后将结果传递给FromStr
。parse_fmt()
接受一个NumberFormat
,并要求模式完全匹配。识别的部分按正确的顺序重新组装,并传递给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));
模式
以下模式被识别
0
- 数字或09
- 数字或空格#
- 数字或符号或空格-
- 符号;正数时显示空格+
- 符号;正数显示 '+',负数显示 '-'。未本地化。.
- 小数分隔符:
- 小数分隔符,始终显示,
- 分组分隔符。如果格式符号如此指定,可能完全不存在。E
- 大写指数e
- 小写指数- '$' - 货币。输出长度根据货币符号可变。
\
- 所有 ASCII 字符(ASCII 32-128!)都是保留的,必须转义。_
- 其他 Unicode 字符可以使用而不需要转义。
性能
我运行的一个简单基准测试给出了以下时间:
- 1.68 x 格式!
- 3.5 x ryu
依赖关系
~4MB
~45K SLoC