3 个不稳定版本
0.2.0 | 2022年2月20日 |
---|---|
0.1.1 | 2022年1月25日 |
0.1.0 | 2022年1月25日 |
#88 in 财务
41 次每月下载
在 2 crates 中使用
46KB
655 行
accounting
accounting 是一个用于货币和货币格式化的库。 (受 golang 的 accounting 启发)
示例
use accounting::Accounting;
fn main() {
let mut ac = Accounting::new_from("$", 2);
ac.set_format("{s} {v}");
assert_eq!(ac.format_money(1000000), "$ 1,000,000.00");
assert_eq!(ac.format_money(-5000), "-$ 5,000.00");
}
设置 Accounting
变量的格式化字符串,然后将数字格式化为货币值。在格式化字符串中
- {v} 是值的占位符,将被数字替换。
- {s} 是符号的占位符,将被货币符号(如 $、¥ 等)替换。
#[cfg(feature="decimal")]
fn format_decimal_type() {
let mut ac = Accounting::new_from("$", 2);
ac.set_format("{s} {v}");
let x = rust_decimal::Decimal::new(-12345678921, 2);
assert_eq!(ac.format_money(x), "-$ 123,456,789.21");
}
如果您想使用十进制数,启用功能 decimal
,然后您可以使用 rust_decimal 库支持的十进制数。如下所示。
Accounting 结构体
pub struct Accounting {
symbol: String,
precision: usize,
thousand: String,
decimal: String,
format_positive: String,
format_negative: String,
format_zero: String
}
字段 | 类型 | 描述 | 默认值 | 示例 |
---|---|---|---|---|
symbol | String | 货币符号 | $ | $ |
precision | usize | 货币精度(小数位数) | 0 | 2 |
thousand | String | 千位分隔符 | , | . |
decimal | String | 小数分隔符 | . | , |
format_positive | String | 正值的格式化字符串({v} = 值,{s} = 符号) | {s}{v} | {s} {v} |
format_negative | String | 负值的格式化字符串 | -{s}{v} | {s} ({v}) |
format_zero | String | 零值的格式化字符串 | {s}{v} | {s} -- |
示例
- 设置格式化字符串。
let mut ac = Accounting::new_from("$", 2);
ac.set_format_positive("{s} {v}");
ac.set_format_negative("{s} ({v})");
ac.set_format_zero( "{s} --");
assert_eq!(ac.format_money(1000000), "$ 1,000,000.00");
assert_eq!(ac.format_money(-5000), "$ (5,000.00)");
assert_eq!(ac.format_money(0), "$ --");
- 设置千位分隔符。
let mut ac = Accounting::new_from("$", 2);
ac.set_thousand_separator("'");
assert_eq!(ac.format_money(123456789.213123), "$123'456'789.21")
- 设置小数分隔符。
let mut ac = Accounting::new_from("$", 2);
ac.set_decimal_separator("'");
assert_eq!(ac.format_money(123456789.213123), "$123,456,789'21")
format_money
函数参数需要实现 FormatNumber
特性。
FormatNumber 特性
FormatNumber
是库中的一个特性。实现了此特性的类型可以使用自定义精度和分隔符格式化为字符串。已实现类型包括
- 原始类型:i8, u8, i16, u16, i32, u32, i64, u64, i128, u128, isize, usize, f32, f64。
- 十进制类型:
rust_decimal::Decimal
特性定义
pub trait FormatNumber {
fn format_number(&self, precision: usize, thousand: &str, decimal: &str) -> String;
}
示例
use accounting::FormatNumber;
let x = 123456789.213123f64;
assert_eq!(x.format_number(2, ",", "."), "123,456,789.21");
unformat 函数
unformat
函数删除所有货币格式化并返回数字字符串。
示例
use accounting::unformat;
assert_eq!(unformat("$4,500.23", 2, "USD"), Ok("4500.23".to_string()));
assert_eq!(unformat("EUR 12.500,3474", 3, "EUR"), Ok("12500.347".to_string()));
依赖
~2–3.5MB
~59K SLoC