بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

مشکل  اعداد بزرگ در سورس ماشین حساب (استاد لطفا کمک کنید)

مدیریت گفتگو
ninjamarket 12 سال پیش
آخرین تغییر: 10 سال پیش

با عرض درود فراوان

خدمت استاد گرامی

استاد بنده طبق راهنمایی شما برنامه ماشین حساب رو طراحی کردم و حتی امکانات دیگری به آن اضافه کردم، اما یک مشکل که بنده رو اذیت میکنه اینه که این برنامه با اعداد بزرگ مشکل دارد.

مثلا اگر دو عدد 100 * 1000000 را در هم ضرب کنید خروجی یک عدد با نماد علمی  خواهد بود که برای همچین محاسبه ای این خروجی کمی غیر منطقی هست، در صورتی که اعداد خیلی بزرگ باشن باید نماد علمی نمایش داده بشه

حتی سورس شما رو هم تست کردم همین مشکل وجود دارد.

دلیل این مشکل چی هست

با تشکر

نظرات

Eminent 12 سال پیش
دوست عزیز ضرب این دو عدد یه عدد خیلی بزرگ هستش که تو type از نوع int که تقریبا محدوده 32677 تا -32678 داره جا نمیشه باید از نوع داده بزرگتر مثلا long استفاده کنید.
ninjamarket 12 سال پیش
دوست عزیز همه متغیرها در برنامه از جنس double می باشد. اگر به سورس استاد دسترسی دارید تست کنید و می بینید که مشکل دارد
JSONObject 12 سال پیش
: اونوقت کسی که مشکل تو رو داشته باشه باید سرچ کنه کلماتی مثل - خواهشا - استاد یا مثلا پاسخ رو
CreativeBoy 12 سال پیش
سلام، دوست عزیز شما هنوز صفحه قوانین و راهنما رو مطالعه نکردید، اگر به صفحه قوانین برید میبینید که استاد گفتن که در صورت اصولی نبودن سوال یا عنوان سوال یا . . . نباید انتظار داشته باشید که سوالتون جوابی بگیره، پس خواهش میکنم که عنوان سوال رو تصحیح کنید. با تشکر.
Borhani 12 سال پیش
سلام دوست عزیز لطفا در طراحی سوال دقت کنید تا همه بتوانیم از وجود چنین سوال زیبایی بهره ببریم
ninjamarket 12 سال پیش
چشم دوستان، تصحیح می کنم

پاسخ‌ها 4

CreativeBoy 12 سال پیش

سلام

در مورد سورس کد استاد باید بگم که مشکلی نداره فقط باید کاملتر بشه (چون اون کدها فقط برای آموزش بود) و استاد هم خودشون توی آموزش همون بخش گفتن که برای پیاده سازی یک ماشین حساب حرفه ای و دقیق الگوریتم های پیچیده ای باید پیاده سازی بشه. در مورد جواب سوالتون میتونم یک سرنخ بهتون بدم و بقیه پشتکار شما رو می طلبه.

برای این که بتونید اعداد خیلی بزرگ که مثلا خارج از محدوده double هستند (برای مشاهده محدوده datatype های مختلف به این لینک برید) رو توی ماشین حساب نمایش بدید باید از نماد علمی استفاده کنید، به این صورت که توی برنامه تعیین کنید که اگر مقدار عدد بدست امده بیشتر یا کمتر از مقدار max و min بود اون عدد رو به صورت توان هایی از 10 نشون بده ( نمونه این چیزی که گفتم رو میتونید توی ماشین حساب های مهندسی ببینید. به این شکل )

توی این لینک هم میتونید کدها جاوا برای تبدیل عدد به نماد علمی رو ببینید. 

یادتون باشه که برای پیاده سازی ماشین حساب باید حوصله به خرج بدید و سعی کنید قوائد ریاضی رو به درستی پیاده سازی کنید. 

موفق باشید.

نظرات

ninjamarket 12 سال پیش
دوست گرامی، مشکل در نماد علمی نیست، متغیرهای double به خودی خود نماد علمی را نمایش می دهند، مشکل اینجاست که اعداد نسبتا کوچکتری که نیاز به نماد علمی ندارند باز هم به شکل نماد علمی نمایش داده می شوند، بنده این مشکلات رو فقط در جاوا دارم میبینم، در زبان های برنامه نویسی دیگری که بنده سال هاست دارم کار می کنم این مشکلات موجود نیست
Ali 12 سال پیش
لطفا اول یه نگاه به سوالتون بکنید بعد انتظار جواب دلخواه رو داشته باشید چون شما در متن سوالتون گفتید خروجی یک عدد نامفهومه در حالی که الان میگید اعداد نسبتا کوچکتری که نیاز به نماد علمی ندارند باز هم به شکل نماد علمی نمایش داده می شوند.
ninjamarket 12 سال پیش
دوست عزیز نماد علمی برای عموم کمی نامفهومه، به نظر شما اگر خروجی این محاسبه که باید 100000000 باشه به شکل نماد علمی نمایش داده بشه برای کاربران عمومی نامفهوم تلقی نمیشه، در صورتی که شما در زبان برنامه نویسی #C برنامه ماشین حساب رو بنویسید دقیقا خروجی واضح رو در یافت می کنید، اگر با یک ماشین حساب معمولی باز هم محاسبه کنید یک جواب واضح خواهید داشت نه یک نماد علمی
Ali 12 سال پیش
ممنون که سوالتون رو اصلاح کردید.
مجتبی یگانه 12 سال پیش

شما قبلا سوالتون رو در این لینک مطرح کرده بودید ، من هم پاسخ دادم ، بهتر بود به جای درج سوال جدید ، لینک سوالتون رو به افرادی که فکر میکنید میتونن راهنمایی تون کنن پ خ کنید ، در تصحیح پاسخ Creative Boy عزیز هم باید بگم که نیازی به محاسبه ی نماد علمی نیست ! ، خود نوع داده ی Double اگر مقدار رو نتونه نشون بده به صورت یک عدد علمی محاسبه میکنه ، توضیحات بیشتر هم در لینک موجود هست

نظرات

CreativeBoy 12 سال پیش
ALU جان ممنون بابت تصحیح پاسخ، خیلی وقته که دست به کیبرد نشدم و به خاطر همین فراموش کرده بودم.
ninjamarket 12 سال پیش
جناب A.L.U لطفا هر زمان تونستید این سورس رو جوری اصلاح بفرمائید که مشکل حل بشه، یک کامنت بزارید، من تا حالا با جواب های شما مشکلم حل نشده، بنده تازه کار نیستم و به اندازه کافی سابقه برنامه نویسی دارم، اما چه اینجا و چه در لینک قبلی شما غیر از توهین به دیگران هیچ کار دیگه ای انجام ندادید، هر زمان تونستید مشکل این سورس رو حل کنید خواهش می کنم اونوقت پاسخ دهید.
مجتبی یگانه 12 سال پیش
@ CreativeBoy ، شما استاد مایی ، فدای خستگیات :)
مجتبی یگانه 12 سال پیش
@ ninjamarket ، دوست عزیزم ، موضوع اصلا اونطوری که شما فکر می کنید نیست ، موضوع اینه که متن ها هیچ وقت نمیتونن منظور رو کامل برسونن ، خستگی ، بی حوصلگی ، کم خوابی ، خواب آلوگی ، همه و همه دلایلی هستن که میتونن متن رو از منظور اصلی دور تر کنند ، من حس میکنم شما به خاطر اینکه تعداد کامنت های من زیاد شده ، حس کردید شاید دارم با ناراحتی جواب میدم ، اما اصلا اینطور نیست ، من اگه از چیزی یا کسی ناراحت بشم ، دلیلی نداره کار رو ادامه بدم ، فقط یه بحث علمی مفید بود ، در مورد بی احترامی تو این تاپیک هم واقعا متوجه نمیشم منظورتون کجاست ، اگه قسمت تصحیح پاسخ هست ، باید بدونید من به این موضوع اعتقاد دارم که "جایی که بزرگی کوچک بشه ، کوچکی بزرگ نمیشه" ، من فقط کاری که باید انجام میدادم رو انجام دادم ، یعنی جلوگیری از صرف وقت برای کاری که داره اتوماتیک انجام میشه ، برداشت هرکسی به خودش مربوط هست و من برای همه احترام قائل ام ، اما فکر میکنم برداشت اشتباه شما ، باعث تند شدن گفتارتون شده
ninjamarket 12 سال پیش
دوست عزیز در رابطه با عنوان سوال نبود، بلکه در کل در لحن ابتدای جملاتتون بود، امیدوارم بنده هم شما رو ناراحت نکرده باشم
Ali 12 سال پیش

سلام به همگی

دوستان همگی جواب‌های کامل و درستی دادند، اما اصلا مشکلی وجود نداره؛ در واقع اون چیزی که ninjamarket بهش میگن عدد نامفهوم یعنی حاصل 100 * 1000000 که برابر 1.0E8 میشه همون جواب ضرب البته به صورت نماد علمیه.
(1.0E8 یعنی 1.0 * 108)

نظرات

ninjamarket 12 سال پیش
ببخشید بنده خانم نیستم، اشتباه اسم کاربری بوده، چون همسرم این اکانت رو برای ینده ایجاد کردن، بله حق با شما هست، البته باید قبول کنید این عدد خیلی بزرگی نیست و نباید در خروجی این شکلی نمایش داده بشه
Ali 12 سال پیش
نامتون اصلاح شد.
مجتبی یگانه 12 سال پیش
خوب پس الان باید به دنبال الگوریتمی برای تبدیل عدد علمی به عدد عادی باشید ، که این کلید convert scientific notation to number java برای جست و جو کمکتون میکنه لینک
Spirit 12 سال پیش

داشتم یه راه حل پیدا میکردم که دیدم A.L.U اشاره کردن بهش :

 public class Main {

public static void main(String[] args) {

String a = "100";
String b = "1000000";

double d = Double.valueOf(a) * Double.valueOf(b);

System.out.println("as Double : " + d);
System.out.println("as BigDecimal : " + new BigDecimal(d));

}

}

خروجی :

as Double : 1.0E8
as BigDecimal : 100000000

 

نظرات

ninjamarket 12 سال پیش
دوست عزیز واقعا دستتون درد نکنه این راه حل بهترین راه حلی بود که میتونست خیلی سریع مشکل رو حل کنه، فقط شما در این راه حل اومدید متغیرهای double رو در انتها به BigDecimal تبدیل کرید، درسته ؟ و چون BigDecimal یک کلاس هست اون رو new کردید ؟ درست گفتم
Spirit 12 سال پیش
بله درست متوجه شدید ، متد toString هم این کلاس داره که میتونید برای setText کردن استفاده کنید
ninjamarket 12 سال پیش
بنده فقط تو این بخش مشکل داشتم که به لطف شما حل شد، خیلی ممنون، تو گرفتن ورودی و خروی از editText مشکلی ندارم، کلا این برنامه برام جالب بود، چون تو تمام زبان های برنامه نویسی برای همچین برنامه ای اینقدر به چالش کشیده نمیشدم، اصولا یک برنامه ماشین حساب رو میشه تو جلسات سوم تا چهارم آموزش داد، اما تو جاوا برام خیلی از مطالب جالب بودن، در کل ارتباط خوبی با این زبان پیدا کردم و چون #C با این زبان خیلی نزدیک هستن در کل برام جالب تر شده.
GR 10 سال پیش
منم این مشکل رو دارم چجوری درستش کنم؟؟؟؟ کمممممککککک
GR 10 سال پیش
این روش فقط برای نشون ندادن اعشار صفر خوبه وگرنه اگه جواب 3رقم اعشار باشه این خرابش میکنه. ینی 3رقم رو نشون میده ولی بعدز 3رقم هم چندین عدد نشون میده. دلیلش چی میتونه باشه؟؟ کمک کنید تورو خدا

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .