diff --git a/src/cli.rs b/src/cli.rs index b2f4c0a..ef92577 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -41,6 +41,10 @@ pub struct Cli { #[arg(long = "invert", short = 'i')] pub should_invert: bool, + //// Max decimals to keep in price. + #[arg(long = "max-decimals", short = 'd', default_value_t = 5)] + pub max_decimals: u8, + /// Amount of data #[arg(value_enum, default_value_t = Resolution::TODAY, long="resolution", short='r')] pub resolution: Resolution, diff --git a/src/main.rs b/src/main.rs index 9e4d292..f82d92a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ use ecb_rates::cli::{Cli, FormatOption}; use ecb_rates::models::ExchangeRateResult; use ecb_rates::parsing::parse; use ecb_rates::table::{TableRef, TableTrait as _}; -use ecb_rates::utils_calc::{change_perspective, filter_currencies, invert_rates}; +use ecb_rates::utils_calc::{change_perspective, filter_currencies, invert_rates, round}; async fn get_and_parse(url: impl IntoUrl) -> anyhow::Result> { let client = Client::new(); @@ -84,6 +84,8 @@ async fn main() -> ExitCode { invert_rates(&mut parsed); } + round(&mut parsed, cli.max_decimals); + if !cli.currencies.is_empty() { let currencies = cli .currencies diff --git a/src/table/table_display.rs b/src/table/table_display.rs index 69a479f..25821f6 100644 --- a/src/table/table_display.rs +++ b/src/table/table_display.rs @@ -36,7 +36,7 @@ pub fn helper_table_print( for (left, right) in table.get_rows().iter() { let left_str = left.as_ref(); - let right_str = format!("{:.5}", right); + let right_str = right.to_string(); let padding_amount = width.saturating_sub(left_str.len() + right_str.len()); let padding = " ".repeat(padding_amount); writeln!(f, "{}{}{}", left_str.bold().green(), padding, right_str)?; diff --git a/src/utils_calc.rs b/src/utils_calc.rs index 26e0695..81b9e3e 100644 --- a/src/utils_calc.rs +++ b/src/utils_calc.rs @@ -44,3 +44,13 @@ pub fn invert_rates(exchange_rate_results: &mut [ExchangeRateResult]) { } } } + +pub fn round(exchange_rate_results: &mut [ExchangeRateResult], max_decimals: u8) { + let power = 10.0_f64.powf(max_decimals as f64); + for rate_res in exchange_rate_results { + for (_, iter_rate) in rate_res.rates.iter_mut() { + let more = iter_rate.deref() * power; + *iter_rate = more.round() / power; + } + } +}