PDA

View Full Version : سوال: مشکل با اعداد اعشاری



navid1n2000
یک شنبه 24 خرداد 1388, 00:08 صبح
توی برنامه من یک میزان وام دارم و یکی هم میزان قسط وام و تعداد اقساط
وقتی کاربر میزان قسط وام رو میزنه اتوماتیک میزان وام تقسیم میشه بر میزان قسط و تعداد اقساط بدست میاد .
سوال اولم اینه که منچجوری بهترین عدد رو بگیرم . یعنی چجوری روندش کنم.
یعد یک امکان دیگری هم که دادم اینه که می تونن اول تعدا داقساط رو بده بعد اتوماتیک میزان قسط وام مشخص بشه . اینو چجوری روند کنم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

tdkhakpur
یک شنبه 24 خرداد 1388, 00:43 صبح
سلام
ببینید شما اصلا به مقدار موجود در متغییر اعشاری که از حاصل عملیات شما بدست می آید کاری نداشته باشید. خودتون میدونید مقدار اعشار حتی در بینهایت هم دقیق نیست.
پس برای اینکه محاسبات دقیق باشد شما خروجی را که در صفحه یا چاپکر برای نمایش به مشتری یا زدن یک سند حسابداری ظاهر می کنید رو با مقدار ریال ظاهر کنید و به اعشار کاری نداشته باشد.
این کار به این دلیل هست که حجم بار اضافی حاصل از اعشار رو هم جمع شده و در اقساط بعدی بصورت واحد شما که ریال هست به مشتری ارائه میشود.
موفق باشید.

fdaliry
یک شنبه 24 خرداد 1388, 02:27 صبح
اگه x متغییر ما باشه از کد زیر رند میشه


(int)Math.Round( x)

pesar irooni
یک شنبه 24 خرداد 1388, 02:46 صبح
خوب یه خوبی که اینجا هست معمولا وام به اندازه ای هست که نیاز به عدد اعشاری نیست و میشه از عدد صحیح استفاده کرد. مثلا وام 1500.5 تومنی که نداریم. ولی به هرحال شما مشکلتون روند کردن اعداد به یه مقداری که بشه پرداخت کرد. مثلا اگه وام 71000 تومنه و باید در 6 قسط پرداخت بشه که میشه 11833.33 تومن برای هر نوبت که ما میخواهیم مثلا بشه 12000 تومن. حالا شما اگه مبنای روند کردتون رو 1000 تومن بگیرید میتونید با محاسبه ماوتفاوت آن بر عدد روند قابل تقسیم بر 1000 اینکار رو انجام بدی و این ماوتفاوت را (در مثال ما 166.6667 تومن) به عدد اصلی اضافه کنیم تا یه عدد روند (در این مثال 12000 تومن) حاصل بشه. مثلا تو مثال ما به اینصورت عمل میکنی:


float a = 71000;
float b = 6;
float diff = 1000 - (a/b)%1000;
Console.WriteLine((a / b));
Console.Write((a/b)+diff);

البته تعداد قسطهایی که مشتری باید با این مقدار پرداخت کنه بصورت زیر محاسبه میشه که معمولا 1 قسط باید فاصله داشته باشه.


Math.Floor(a / ((a / b) + diff))

و قسط آخر هم که ماوتفاوت قسطهایی که پرداخته (یعنی 12000 تومن ضرب در مقدار بالا) از وام اصلی هست.