4个稳定版本
新 1.0.3 | 2024年8月25日 |
---|---|
1.0.1 | 2024年8月23日 |
1.0.0 | 2024年8月22日 |
#95 in 值格式化
204 每月下载量
43KB
330 行
scaler
简介
此crate提供了一种方便的Formatter
,用于缩放、四舍五入和显示数字。
缩放描述了使用十进制或二进制单位前缀来提高可读性的用法;尽管也支持无缩放和科学记数法。
四舍五入可以是到指定的量级,也可以是到有效数字的数量。
分隔符可以自由调整。分组分隔符在小数点前每3位数字处分隔数字组,而小数点分隔整数部分和小数部分。
符号行为可以设置为始终显示符号,仅在数字为负时显示符号,或永不显示符号。
用法
- 执行
Formatter::new
以创建具有默认设置的新的Formatter
。 - 使用设置器根据需要调整分隔符、四舍五入、缩放和符号行为。
- 使用
Formatter::format
格式化数字。
四舍五入
-
量级
:- 将数字四舍五入到$10^m$的位数。
- 包含$m$。
let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::Magnitude(-2)); assert_eq!(f.format(123.456), "123,46"); assert_eq!(f.format(0.789), "790 m"); assert_eq!(f.format(42069), "42,06900 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::Magnitude(-1)); assert_eq!(f.format(123.456), "123,5"); assert_eq!(f.format(0.789), "800 m"); assert_eq!(f.format(42069), "42,0690 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::Magnitude(0)); assert_eq!(f.format(123.456), "123"); assert_eq!(f.format(0.789), "1"); assert_eq!(f.format(42069), "42,069 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::Magnitude(1)); assert_eq!(f.format(123.456), "120"); assert_eq!(f.format(0.789), "0"); assert_eq!(f.format(42069), "42,07 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::Magnitude(2)); assert_eq!(f.format(123.456), "100"); assert_eq!(f.format(0.789), "0"); assert_eq!(f.format(42069), "42,1 k");
-
有效数字
:- 将数字四舍五入到$n$个有效数字。
- 包含$n$。
let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(0)); assert_eq!(f.format(123.456), "0"); assert_eq!(f.format(0.789), "0"); assert_eq!(f.format(42069), "0"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(1)); assert_eq!(f.format(123.456), "100"); assert_eq!(f.format(0.789), "800 m"); assert_eq!(f.format(42069), "40 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(2)); assert_eq!(f.format(123.456), "120"); assert_eq!(f.format(0.789), "790 m"); assert_eq!(f.format(42069), "42 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(3)); assert_eq!(f.format(123.456), "123"); assert_eq!(f.format(0.789), "789 m"); assert_eq!(f.format(42069), "42,1 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(4)); assert_eq!(f.format(123.456), "123,5"); assert_eq!(f.format(0.789), "789,0 m"); assert_eq!(f.format(42069), "42,07 k"); let f: scaler::Formatter = scaler::Formatter::new() .set_rounding(scaler::Rounding::SignificantDigits(5)); assert_eq!(f.format(123.456), "123,46"); assert_eq!(f.format(0.789), "789,00 m"); assert_eq!(f.format(42069), "42,069 k");
缩放
-
二进制
:- 以$2^{10} = 1.024$的因子缩放。
- 如果没有为此量级定义前缀:回退到科学记数法。
- 包含是否在数字和单位前缀之间放置空格。
let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::Binary(true)); assert_eq!(f.format(0.5), "1,000 * 2^(-1)"); assert_eq!(f.format(1), "1,000"); assert_eq!(f.format(64), "64,00"); assert_eq!(f.format(128), "128,0"); assert_eq!(f.format(1023), "1.023"); assert_eq!(f.format(1024), "1,000 Ki"); assert_eq!(f.format(2_f64.powi(10)), "1,000 Ki"); assert_eq!(f.format(2_f64.powi(20)), "1,000 Mi"); assert_eq!(f.format(2_f64.powi(30)), "1,000 Gi"); assert_eq!(f.format(2_f64.powi(40)), "1,000 Ti"); assert_eq!(f.format(2_f64.powi(50)), "1,000 Pi"); assert_eq!(f.format(2_f64.powi(60)), "1,000 Ei"); assert_eq!(f.format(2_f64.powi(70)), "1,000 Zi"); assert_eq!(f.format(2_f64.powi(80)), "1,000 Yi"); assert_eq!(f.format(2_f64.powi(90)), "1,000 * 2^(90)"); let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::Binary(false)); assert_eq!(f.format(1024), "1,000Ki");
-
十进制
:- 以$10^{3} = 1.000$的因子缩放。
- 如果没有为此量级定义前缀:回退到科学记数法。
- 包含是否在数字和单位前缀之间放置空格。
let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::Decimal(true)); assert_eq!(f.format(1e-31), "1,000 * 10^(-31)"); assert_eq!(f.format(1e-30), "1,000 q"); assert_eq!(f.format(1e-27), "1,000 r"); assert_eq!(f.format(1e-24), "1,000 y"); assert_eq!(f.format(1e-21), "1,000 z"); assert_eq!(f.format(1e-18), "1,000 a"); assert_eq!(f.format(1e-15), "1,000 f"); assert_eq!(f.format(1e-12), "1,000 p"); assert_eq!(f.format(1e-9), "1,000 n"); assert_eq!(f.format(1e-6), "1,000 µ"); assert_eq!(f.format(1e-3), "1,000 m"); assert_eq!(f.format(1), "1,000"); assert_eq!(f.format(10), "10,00"); assert_eq!(f.format(100), "100,0"); assert_eq!(f.format(999), "999,0"); assert_eq!(f.format(1000), "1,000 k"); assert_eq!(f.format(1e3), "1,000 k"); assert_eq!(f.format(1e6), "1,000 M"); assert_eq!(f.format(1e9), "1,000 G"); assert_eq!(f.format(1e12), "1,000 T"); assert_eq!(f.format(1e15), "1,000 P"); assert_eq!(f.format(1e18), "1,000 E"); assert_eq!(f.format(1e21), "1,000 Z"); assert_eq!(f.format(1e24), "1,000 Y"); assert_eq!(f.format(1e27), "1,000 R"); assert_eq!(f.format(1e30), "1,000 Q"); assert_eq!(f.format(1e33), "1,000 * 10^(33)"); let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::Decimal(false)); assert_eq!(f.format(1000), "1,000k");
-
无
:- 无缩放
- 不回退到科学记数法
let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::None); assert_eq!(f.format(1e-10), "0,0000000001000"); assert_eq!(f.format(0.1), "0,1000"); assert_eq!(f.format(1), "1,000"); assert_eq!(f.format(10), "10,00"); assert_eq!(f.format(100), "100,0"); assert_eq!(f.format(1000), "1.000"); assert_eq!(f.format(1e10), "10.000.000.000");
-
科学
:- 始终使用科学记数法
let f: scaler::Formatter = scaler::Formatter::new() .set_scaling(scaler::Scaling::Scientific); assert_eq!(f.format(0.1), "1,000 * 10^(-1)"); assert_eq!(f.format(1), "1,000 * 10^(0)"); assert_eq!(f.format(10), "1,000 * 10^(1)");
分隔符
group_separator
- 在小数点前每3位数字处分隔数字组。
decimal_separator
- 分隔数字的整数部分和小数部分。
let f: scaler::Formatter = scaler::Formatter::new()
.set_scaling(scaler::Scaling::None)
.set_separators(".", ",");
assert_eq!(f.format(1), "1,000");
assert_eq!(f.format(10), "10,00");
assert_eq!(f.format(100), "100,0");
assert_eq!(f.format(1000), "1.000");
assert_eq!(f.format(10000), "10.000");
let f: scaler::Formatter = scaler::Formatter::new()
.set_scaling(scaler::Scaling::None)
.set_separators("", ",");
assert_eq!(f.format(1), "1,000");
assert_eq!(f.format(10), "10,00");
assert_eq!(f.format(100), "100,0");
assert_eq!(f.format(1000), "1000");
assert_eq!(f.format(10000), "10000");
let f: scaler::Formatter = scaler::Formatter::new()
.set_scaling(scaler::Scaling::None)
.set_separators(",", ".");
assert_eq!(f.format(1), "1.000");
assert_eq!(f.format(10), "10.00");
assert_eq!(f.format(100), "100.0");
assert_eq!(f.format(1000), "1,000");
assert_eq!(f.format(10000), "10,000");
符号
-
始终
- 始终显示符号,即使数字为正数。
let f: scaler::Formatter = scaler::Formatter::new() .set_sign(scaler::Sign::Always); assert_eq!(f.format(std::f64::NEG_INFINITY), "-∞"); assert_eq!(f.format(-1), "-1,000"); assert_eq!(f.format(0), "+0,000"); assert_eq!(f.format(1), "+1,000"); assert_eq!(f.format(std::f64::INFINITY), "+∞");
-
OnlyMinus
- 仅当数字为负时显示符号。
let f: scaler::Formatter = scaler::Formatter::new() .set_sign(scaler::Sign::OnlyMinus); assert_eq!(f.format(std::f64::NEG_INFINITY), "-∞"); assert_eq!(f.format(-1), "-1,000"); assert_eq!(f.format(0), "0,000"); assert_eq!(f.format(1), "1,000"); assert_eq!(f.format(std::f64::INFINITY), "∞");
依赖项
~87KB