diff options
author | Guillermo Ramos | 2025-02-04 11:20:54 +0100 |
---|---|---|
committer | Guillermo Ramos | 2025-02-06 00:13:11 +0100 |
commit | 4b49c17f91196405ed34535336147d91a805bcf5 (patch) | |
tree | 7e252de9d1bf53a4d1383aaff086d9c05c59b714 /src/lib.rs | |
parent | 8907130570df1a67d30a0266c2ba17c27975d713 (diff) | |
download | hiccup-4b49c17f91196405ed34535336147d91a805bcf5.tar.gz |
Refactor
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 47 |
1 files changed, 30 insertions, 17 deletions
@@ -12,12 +12,13 @@ pub struct Mortgage { impl fmt::Display for Mortgage { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!( + writeln!( f, - "{:3} | {:5} | {:4.2}\t{:.2}\t{:.2}\t{:.2}", + "{:4} | {:5} | {:4.2}\t({:.2} + {:.2})\t{:.2}", if self.period % 12 == 0 { format!("Y{}", (self.period / 12) + 1) } else { + // return Ok(()); "".to_string() }, self.period, @@ -42,7 +43,7 @@ impl Mortgage { } } - pub fn run(&mut self, updates: HashMap<u32, MortgageUpdate>) { + pub fn run(&mut self, updates: MortgageUpdates) { let principal = self.principal; let topay_total = self.quota * self.quotas as f64; @@ -53,9 +54,29 @@ impl Mortgage { let mut payed_interest = 0.; let mut payed_amortized = 0.; - println!("Año | Cuota | c\t\tIn\tAn\tCn"); + println!("\n========================================================"); + println!( + "=== HIPOTECA: {}€, A {} AÑOS, INTERÉS FIJO {:.2}% ===", + self.principal, + self.quotas / 12, + self.i12 * 12. * 100., + ); + println!("========================================================"); + + println!("\n\n# A PRIORI\n"); + println!( + "== Total a pagar: {:.2} ({} cap + {topay_interest:.2} int)", + topay_total, principal + ); + println!( + "== Los intereses suponen un {:.2}% del total", + 100. * topay_interest / topay_total + ); + + println!("\n\n# SIMULACIÓN CUOTAS\n"); + println!("Year | Month | Quota\t(Intrst + Amrtzd)\tPrincipal"); while self.quotas > 0 && self.principal > 0. { - println!("{self}"); + print!("{self}"); if let Some(update) = updates.get(&self.period) { payed_amortized += self.update(update); } @@ -67,17 +88,7 @@ impl Mortgage { payed_total += payed_amortized; - println!("\n# A PRIORI"); - println!( - "== Total a pagar: {:.2} ({} cap + {topay_interest:.2} int)", - topay_total, principal - ); - println!( - "== Los intereses suponen un {:.2}% del total", - 100. * topay_interest / topay_total - ); - - println!("\n# A POSTERIORI"); + println!("\n\n# RESULTADO FINAL\n"); println!( "== Total pagado: {:.2} ({:.2} cap + {:.2} int + {:.2} amortizado)", payed_total, payed_principal, payed_interest, payed_amortized @@ -86,7 +97,7 @@ impl Mortgage { "== Los intereses suponen un {:.2}% del total", 100. * payed_interest / payed_total ); - println!("\n"); + println!(); } fn update(&mut self, update: &MortgageUpdate) -> f64 { @@ -120,6 +131,8 @@ impl Mortgage { } } +pub type MortgageUpdates = HashMap<u32, MortgageUpdate>; + pub enum MortgageUpdate { Amortize(f64), } |