رند شدن یا نشدن اعداد اعشاری در جاوا


یکشنبه، 6، آگوست، 2017 در ساعت 04:02


خیلی وقتا پیش میاد که زبان برنامه نویسی جاوا رند شدن اعداد تا چند رقم اعشار برای ما مد نظره، برای مثال:

نتیجه ای که انتظار اونو داریم مسلمنا برابر با 0.1 است اما اگر برنامه را اجرا کنید نتیجه برابر با 0.0 خواهد شد.

از دلايل اين امر اگر بگذريم ساده ترين راه ممکن براي اينکه اين رند کردنه اتفاق نيوفته اينه که اعداد رو بصورت اعشاري بنويسم

خط اول که متغيير d رو تعريف کرديم بجاي 10 از دقت اعشاري تا يک رقم اعشار استفاده مکنيم يعني 10.0 و همین کارو به دلخواه میتونیم روی 100 هم اعمال کنیم:

خب حالا اگه برنامه رو به صورت زير بنويسيم:

و نتيجه رو در کنسول مشاهده کنيم به اين نتيجه ميرسيم:

خب بذاريد کار رو با يک برنامه عملي پيش بگيريم، اول به يک سناريو احتياج داريم:

برنامه اي تعريف کنيد تحت عنوان Worker که بتواند نام، نام خانوادگي، حقوق ساليانه هر فرد را در خودش ذخيره کند. اين برنامه قابليت افزايش حقوق ساليانه به صورت درصدي را داشته باشد.
سپس يک شي از کلاس بسازيد و 10 درصد به حقوق سالیانه آن اضافه کنيد

خب کلاسي تحت عنوان Worker ايجاد ميکنيم و سه فيلد نام و نام خانوادگي و حقوق ساليانه را براش بصورت private در نظر ميگيريم:

 

اينکه فيلد هارو بايد بصورت private در نظر بگيريم چند دليل دارد:
* دسترسي به اين فيلد ها تنها از طريق متد های آن کلاس در دسترس باشد و بتوانيم اصل پنهان سازی و دسترسي به اون فيلد را محدود يا از بين ببريم
* توصيه شده توسط جاوا است چون در برنامه های متعدد امکان چک کردن ورودی ها را به ما مي دهد

خب بعد از ايجاد فيلد هاي لازم ميريم سراغ سازنده اين کلاس، چون در هنگام نمونه سازي از کلاس وارد کردن اطلاعات اوليه الزاميه:

بعد از درست کردن سازنده یا همون constructor، میریم سراغ متدي که بتونيم فيلد هاي خودمون رو از طريق اون بخونيم پس براي سه متغير نمونه خودمون سه عدد متد get (يا هر نام دلخواهي) لازم داريم

اما ميرسيم به قسمت تغيير حقوق ساليانه که اونو با Set (يا هر نام دلخواهي) نام گذاري ميکنيم، در واقع این متد به ما اجازه میده بتونیم افزایش حقوق را اعمال کنیم:

یک توضيح مختصر در مورد get و set: اين نام گذاري اجباري نيست، اما يه جور قرار داد نانوشته بین برنامه نویسان است که خوندن برنامه هارو آسون تر ميکنه.

کار ما با اين کلاس تمومه و ميريم سراغ کلاس تست يا اجرا کننده
کلاسي تحت عنوان Test ايجاد ميکنيم و برای اینکه بتونیم اونو اجرا کنیم حتما از متد main استفاده میکنیم:

يک شي از کلاس Worker ايجاد ميکنیم:

همونجوری که میبینید سازنده کلاس از ما خواسته که آرگومان های کلاس رو برای ساخت شی از اون کلاس تکمیل کنیم پس مقدار دهي اوليه رو ايجاد ميکنيم:

حالا باید 10 درصد افزایش حقوق رو اعمال کنیم پس از طريق متد get مقدار حقوق رو در يک متغير دلخواه ذخيره ميکنيم:

خب حالا ميخوايم 10 درصد به اون اضافه کنيم پس اونو بصورت زير مينويسيم:

در واقع ابتدا مقدار درصدي رو بدست میاریم یعني 10 تقسيم بر 100 ميکينم تا مقدار .0.1 (درصد افزايشي حقوق) بدست بياريم سپس اون رو به علاوه 1 (مقدار حقوق اوليه) ميکنيم
مقدار 1.1 حقوق اوليه و درصد افرزاشي بدست مياد که اين مقدار برابر ميشه با مجموع کل که اگر اونو در حقوق اصلي ضرب کنيم مقدار دلخواهي که ميخوايم بدست مياد.

حالا مقدار salary رو ست ميکنيم براي حقوق:

خب اگه از متد getSalary() برای  مشاهده حقوق  استفاده کنیم:

با نتيجه زير روبرو ميشيم!!!

 

آشنايي با کلاس Decimal Format در جاوا:

خب دقت اعشاري ما بيش از حد زياده و ما بيشتر از يک رقم بعد از اعشار نياز نداريم پس ميريم سراغ DecimalFormat:
يک شي از اون ميسازيم و مقدار دهي اوليه اونو برابر با “.0” قرار ميدهيم که به ما ميگه تا يک رقم بعد اعشار رو براي ما نشون بده خب در عمل هم براي نشون دادن ريال يک رقم بعد اعشار کافيه:

اول  کلاس DecimalFormat را ایمپورت میکنیم:

بعدش:

ميريم سراغ نشون دادن حقوق ماهيانه:

که نتیجه اون در کنسول:

 

خب برنامه ما تکميله، شاد باشید و خوشحال :)

توصيه برنامه نويسی: هيچوقت کد هارو کپی نکيند!!! بلکه دونه دونه تايپ کنيد تا بهتر متوجه بشيد.

 


avatar