PriceDbl Add(PriceDbl a, PriceDbl b) { // Beide Preise in die einheitliche Währung USD umrechene double aUSD = a.ToUSD(); double bUSD = b.ToUSD(); return new PriceDbl(aUSD + bUSD, CurrencySymbols.USD); }
void Add_korrekt(PriceDbl a, PriceDbl b, out PriceDbl SummeInUSD) { // Beide Preise in die einheitliche Währung USD umrechene double aUSD = a.ToUSD(); double bUSD = b.ToUSD(); SummeInUSD.Value = aUSD + bUSD; SummeInUSD.CurSym = CurrencySymbols.USD; }
public void _01_05_01_Datenstrukturen() { // Preisdatensätze anlegen // Preis einer Computermaus mit Default- Konstruktor anlegen PriceDbl pMouse; pMouse.CurSym = CurrencySymbols.EUR; pMouse.Value = 29.99; // Preis einer mobilen Festplatte mit Parametrierbaren Konstruktor anlegen var pHDD = new Basics.PriceDbl(79.90, CurrencySymbols.SFr); // Preise in USD mittels statischer Methoden von Preis umrechnen und addieren double SumUSD = PriceDbl.ToUSD(pMouse) + PriceDbl.ToUSD(pHDD); // Preise umrechnen mittels Memberfunktion double SumUSD2 = pMouse.ToUSD() + pHDD.ToUSD(); // Summe in Euro umrechnen var SumInEUR = PriceDbl.Exchange(new PriceDbl(SumUSD, CurrencySymbols.USD), CurrencySymbols.EUR); // Preis der Festplatte in Euro umrechnen var pHDD_EUR = PriceDbl.Exchange(pHDD, CurrencySymbols.EUR); // Europreise addierern var SumInEUR_2 = new PriceDbl(pMouse.Value + pHDD_EUR.Value, CurrencySymbols.EUR); Assert.AreEqual(SumInEUR.Value, SumInEUR_2.Value, 0.001); PriceDbl SummeInUSD = new PriceDbl(); // Achtung: Datenstrukturen sind Wertetypen. Bei der Parametereingabe erfolgt Call by Value-> // Ergebnisrückgabe scheitert ! Add(pHDD, pMouse, SummeInUSD); Assert.AreEqual(SummeInUSD.Value, 0.0); // wie bei Wertetypen üblich mittels out ein Call bei Reference anfordern Add_korrekt(pHDD, pMouse, out SummeInUSD); Assert.AreNotEqual(SummeInUSD, 0.0); }
/// <summary> /// Währungstausch in Wunschwährung /// </summary> /// <param name="ValueInUSD"></param> /// <param name="ToCurSym"></param> /// <returns></returns> public static PriceDbl Exchange(PriceDbl price, CurrencySymbols ToCurSym) { return new PriceDbl(ToUSD(price) / ExchangeRateToUSD(ToCurSym), ToCurSym); }
/// <summary> /// Rechnet einen Preis in USD um /// </summary> /// <param name="price"></param> /// <returns></returns> public static double ToUSD(PriceDbl price) { return price.Value * ExchangeRateToUSD(price.CurSym); }