//mevcut paramıza yeni para eklemeye yarayan metod //örneğin Euro olan bir paraya dollar eklenebilir. public bool AddMoney(Money money) { //önce mevcut paranın tl cinsinden tutarı bulunur. decimal tlAmount=this.ConvertToMoney(MoneyPattern.MoneyType.TL, 2).amount; //daha sonra eklenmek istenen paranın tl cinsinden tutarı bulunur. decimal otherTlAmount = money.ConvertToMoney(MoneyPattern.MoneyType.TL, 2).amount; //daha sonra bu iki paranın toplamı mevcut sınıfımızın currency değerine çevrilir. decimal lastAmount = Math.Round((tlAmount + otherTlAmount) / this.GetMoneyRate(this.moneyType), 2); //amoutumuz güncellenir. this.amount = lastAmount; return true; }
static void Main(string[] args) { //1000 euro oluşturulur Money euroMoney = new Money(MoneyType.Euro, 1000); //600 dollar oluşturulu Money dollarMoney = new Money(MoneyType.Dollar, 600); //1000 euroya 600 doları ekleyelim. euroMoney.AddMoney(dollarMoney); //eouro muzu gbp ye convert edelim. Money gbpMoney=euroMoney.ConvertToMoney(MoneyType.GBP, 2); //gbp değerimizi yüzdelerimizi vererek 3 e bölelim List<Money> gbpMoneyList=gbpMoney.DivideMoney(3, 30, 40, 30); //dolarımız birinci gbp değerinden büyük mü kontrolünü yapalım. dollarMoney.isGreaterThan(gbpMoneyList[0]); }
//bu metodla paramızı kaça böleceğimizi ve hangi yüzdeyle böleceğimizi veririz. public List<Money> DivideMoney(int divideCount, params decimal[] percent) { //bölünmesini istediğimiz miktar ile parametre ile gelen yüzdeler //eşit değilse ve yüzdelerin toplamı yüz etmiyorsa hata fırlat. if (divideCount != percent.Count() || percent.Sum(i=>i)!=100) throw new Exception("hata"); List<Money> results = new List<Money>(); //istenen yüzdeler içerisinde dönülür. foreach (var item in percent) { //her bir yüzde için çarpım değeri hesaplanır. decimal temp = item / 100; //paranın çarpım değerine göre miktarı hesaplanır. decimal newAmount = Math.Round(this.amount * temp, 2); //yeni para oluşturulur ve listeye eklenir. Money money = new Money(this.moneyType, newAmount); results.Add(money); } //en sonunda para kaybetmememiz için toplam para ile //bölünen paraların tamamı birbirinden çıkarılır. decimal restAmount = this.amount - results.Sum(i => i.amount); //kalan para birinciye eklenir. Bu kısmı kural değil herhangi //birine eklenebilirdi. results[0].amount += restAmount; return results; }
//para biriminleri arasında convert işlemlerimizi bu metod vasıtasıyla //yapacağız. Sadece çevirmek istediğimiz para birimini hassasiyet bilgisini //veriyoruz. public Money ConvertToMoney(MoneyType type,int roundSensitive) { //eğer çevrilmesini istediğimiz tip ile aynı tip ise aynı tipi dönüyoruz. if (Enum.Equals(moneyType, type)) return this; else { //Toplam TL tutar bulundu. decimal totalTlValue = this.amount * this.Rate; //istenen tipin rate değeri bulunmadı. decimal convertRateValue = GetMoneyRate(type); //istenen kur tipinden toplam amount miktarı hesaplandı. decimal convertAmount = Math.Round(totalTlValue / convertRateValue, roundSensitive); //yeni para birimi ve amounta göre paramız oluştuurlur. Money returnMoney = new Money(type,convertAmount); return returnMoney; } }
public bool isLessThan(Money money) { decimal amount = this.ConvertToMoney(MoneyType.TL, 2).amount; decimal otherAmount = money.ConvertToMoney(MoneyType.TL, 2).amount; decimal div = otherAmount-amount; div = div > 0 ? div : -1 * div; return div > 0.01M; }