3 个版本
0.1.2 | 2023年5月16日 |
---|---|
0.1.1 | 2023年5月16日 |
0.1.0 | 2023年5月14日 |
466 在 日期和时间
每月 30 次下载
58KB
1K SLoC
💱 moneyman
一个古老的货币转换器
示例
$ moneyman convert 50 --from EUR --to PHP --on 2023-05-06 --fallback
50 EUR -> 3044.5833333333350 PHP on the date 2023-05-06
moneyman
也可用作库。
use std::path::PathBuf;
use chrono::NaiveDate;
use rust_decimal_macros::dec;
use rusty_money::{iso, Money};
fn main() {
// Choose where to save the historical data files.
let data_dir: PathBuf = dirs::home_dir()
.and_then(|home_dir| Some(home_dir.join(".moneyman")))
.expect("need a home directory");
// Fetches the historical data from European Central Bank, and creates an
// exchange store.
let store = moneyman_core::ExchangeStore::sync(data_dir).expect("failed ze sync");
let amount_in_usd = Money::from_decimal(dec!(6500), iso::USD);
let date = NaiveDate::from_ymd_opt(2023, 5, 4).expect("ok date");
// Converts 6,500.00 USD to EUR
let actual = store.convert_on_date(amount_in_usd, iso::EUR, date);
let expected = Money::from_decimal(dec!(5869.6044789597254831135994221), iso::EUR);
// Shouldn't explode? :)
assert_eq!(actual, expected);
}
详情
moneyman
在 rusty-money
的基础上扩展,因为它已经提供了许多东西,如 Money
、Currency
、ExchangeRate
和 Exchange
。然而,它并不提供实际转换货币所需的数据。对于历史数据,moneyman
使用欧洲中央银行,并将数据保存到其自己的本地数据存储中。
注意事项
需要知道的一个重要的事情是,ANY_OTHER_CURRENCY
-> EUR 是通过 1/<RATE_OF_ONE_EUR_IN_THAT_OTHER_CURRENCY>
计算的,因为欧洲央行只包含 EUR -> ANY_OTHER_CURRENCY
的汇率,而不包含相反的汇率。这种行为[除法]最可能是 RealWord™ 货币交易所观察到的行为。因此,这最多只是一个近似值。
依赖项
~33–49MB
~799K SLoC