خواهش می کنم...
ببخشید، بنده متوجه نشده بودم که جست و جو در یک بازه صورت می گیره. در این حالت کوئری به شکل زیر قابل بازنویسی است:
که در اون پارامتر fromDate تاریخ شروع جست و جو و پارامتر toDate تاریخ پایان جست و جو هستش.کد:
تاریخ عملا یک بردار تک بعدی هستش. وقتی ما تاریخ آغاز قسط و پایان قسط رو داریم، اختلاف این دو برداری هستش که بازه ی پرداخت قسط رو مشخص می کنه. به شکل مشابه اختلاف toDate و fromDate نیز برداری خواهد بود که بازه ی جست و جو رو مشخص می کنه. ما می تونیم با یک رابطه ی ریاضی، بازه ی هم پوشانی دو بردار تک بعدی رو به دست بیاریم. کد زیر بر همین اساس کار می کنه. شما به ازای هر ردیف حاصل شده از کوئری بالا می تونید این کد رو اجرا بفرمایید و در خروجی میزان پرداختی رو دریافت کنید.
در نهایت اگر خروجی های تابع رو به ازای هر ردیف با هم جمع کنیم، جمع کل اقساط به دست خواهد آمد. تاریخ آغاز قسط، تاریخ پایان قسط و میزان پرداختی ماهانه ی قسط (monthlyPayment)، باید از جدول به تابع computePayment پاس داده بشه. همچنین جهت سادگی تعداد روز های ماه برابر 30 روز در نظر گرفته شده.کد:private double computePayment( DateTime installmentStart /*!< [in] Installment start date */, DateTime installmentEnd /*!< [in] Installment end date */, DateTime fromDate /*!< [in] Searching start date */, DateTime toDate /*!< [in] Searching end date */, double monthlyPayment /*!< [in] Monthly installment payment */) { //! \const Number of days in each month const double _daysInMonth = 30; long _lBound = Math.Max(installmentStart.Ticks, fromDate.Ticks); long _uBound = Math.Min(installmentEnd.Ticks, toDate.Ticks); TimeSpan _diff = TimeSpan.FromTicks(_uBound - _lBound); double _totalMonth = Math.Truncate(_diff.Days / _daysInMonth); double _totalPayment = monthlyPayment * _totalMonth; return _totalPayment; }
شاد باشید
آرمینبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید






پاسخ با نقل قول
Bookmarks