آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

ninjamarket  11 سال پیش  10 سال پیش
+3 0

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

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

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

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

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

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

با تشکر

0 0
دوست عزیز ضرب این دو عدد یه عدد خیلی بزرگ هستش که تو type از نوع int که تقریبا محدوده 32677 تا -32678 داره جا نمیشه باید از نوع داده بزرگتر مثلا long استفاده کنید. (11 سال پیش)
0 0
دوست عزیز همه متغیرها در برنامه از جنس double می باشد. اگر به سورس استاد دسترسی دارید تست کنید و می بینید که مشکل دارد (11 سال پیش)
+2 0
: اونوقت کسی که مشکل تو رو داشته باشه باید سرچ کنه کلماتی مثل - خواهشا - استاد یا مثلا پاسخ رو (11 سال پیش)
+2 0
سلام، دوست عزیز شما هنوز صفحه قوانین و راهنما رو مطالعه نکردید، اگر به صفحه قوانین برید میبینید که استاد گفتن که در صورت اصولی نبودن سوال یا عنوان سوال یا . . . نباید انتظار داشته باشید که سوالتون جوابی بگیره، پس خواهش میکنم که عنوان سوال رو تصحیح کنید. با تشکر. (11 سال پیش)
+3 0
سلام دوست عزیز لطفا در طراحی سوال دقت کنید تا همه بتوانیم از وجود چنین سوال زیبایی بهره ببریم (11 سال پیش)
0 0
چشم دوستان، تصحیح می کنم (11 سال پیش)
 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
CreativeBoy  11 سال پیش
+10 0

سلام

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

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

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

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

موفق باشید.

0 0
دوست گرامی، مشکل در نماد علمی نیست، متغیرهای double به خودی خود نماد علمی را نمایش می دهند، مشکل اینجاست که اعداد نسبتا کوچکتری که نیاز به نماد علمی ندارند باز هم به شکل نماد علمی نمایش داده می شوند، بنده این مشکلات رو فقط در جاوا دارم میبینم، در زبان های برنامه نویسی دیگری که بنده سال هاست دارم کار می کنم این مشکلات موجود نیست (11 سال پیش)
0 0
لطفا اول یه نگاه به سوالتون بکنید بعد انتظار جواب دلخواه رو داشته باشید چون شما در متن سوالتون گفتید خروجی یک عدد نامفهومه در حالی که الان میگید اعداد نسبتا کوچکتری که نیاز به نماد علمی ندارند باز هم به شکل نماد علمی نمایش داده می شوند. (11 سال پیش)
0 0
دوست عزیز نماد علمی برای عموم کمی نامفهومه، به نظر شما اگر خروجی این محاسبه که باید 100000000 باشه به شکل نماد علمی نمایش داده بشه برای کاربران عمومی نامفهوم تلقی نمیشه، در صورتی که شما در زبان برنامه نویسی #C برنامه ماشین حساب رو بنویسید دقیقا خروجی واضح رو در یافت می کنید، اگر با یک ماشین حساب معمولی باز هم محاسبه کنید یک جواب واضح خواهید داشت نه یک نماد علمی (11 سال پیش)
0 0
ممنون که سوالتون رو اصلاح کردید. (11 سال پیش)
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+3 0

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

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

سلام به همگی

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

0 0
ببخشید بنده خانم نیستم، اشتباه اسم کاربری بوده، چون همسرم این اکانت رو برای ینده ایجاد کردن، بله حق با شما هست، البته باید قبول کنید این عدد خیلی بزرگی نیست و نباید در خروجی این شکلی نمایش داده بشه (11 سال پیش)
+1 0
نامتون اصلاح شد. (11 سال پیش)
+3 0
خوب پس الان باید به دنبال الگوریتمی برای تبدیل عدد علمی به عدد عادی باشید ، که این کلید convert scientific notation to number java برای جست و جو کمکتون میکنه لینک (11 سال پیش)
پاسخ به سوال 
Spirit  11 سال پیش
+10 0

داشتم یه راه حل پیدا میکردم که دیدم 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

 

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

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