مشکل اعداد بزرگ در سورس ماشین حساب (استاد لطفا کمک کنید)
با عرض درود فراوان
خدمت استاد گرامی
استاد بنده طبق راهنمایی شما برنامه ماشین حساب رو طراحی کردم و حتی امکانات دیگری به آن اضافه کردم، اما یک مشکل که بنده رو اذیت میکنه اینه که این برنامه با اعداد بزرگ مشکل دارد.
مثلا اگر دو عدد 100 * 1000000 را در هم ضرب کنید خروجی یک عدد با نماد علمی خواهد بود که برای همچین محاسبه ای این خروجی کمی غیر منطقی هست، در صورتی که اعداد خیلی بزرگ باشن باید نماد علمی نمایش داده بشه
حتی سورس شما رو هم تست کردم همین مشکل وجود دارد.
دلیل این مشکل چی هست
با تشکر
سلام
در مورد سورس کد استاد باید بگم که مشکلی نداره فقط باید کاملتر بشه (چون اون کدها فقط برای آموزش بود) و استاد هم خودشون توی آموزش همون بخش گفتن که برای پیاده سازی یک ماشین حساب حرفه ای و دقیق الگوریتم های پیچیده ای باید پیاده سازی بشه. در مورد جواب سوالتون میتونم یک سرنخ بهتون بدم و بقیه پشتکار شما رو می طلبه.
برای این که بتونید اعداد خیلی بزرگ که مثلا خارج از محدوده double هستند (برای مشاهده محدوده datatype های مختلف به این لینک برید) رو توی ماشین حساب نمایش بدید باید از نماد علمی استفاده کنید، به این صورت که توی برنامه تعیین کنید که اگر مقدار عدد بدست امده بیشتر یا کمتر از مقدار max و min بود اون عدد رو به صورت توان هایی از 10 نشون بده ( نمونه این چیزی که گفتم رو میتونید توی ماشین حساب های مهندسی ببینید. به این شکل )
توی این لینک هم میتونید کدها جاوا برای تبدیل عدد به نماد علمی رو ببینید.
یادتون باشه که برای پیاده سازی ماشین حساب باید حوصله به خرج بدید و سعی کنید قوائد ریاضی رو به درستی پیاده سازی کنید.
موفق باشید.
شما قبلا سوالتون رو در این لینک مطرح کرده بودید ، من هم پاسخ دادم ، بهتر بود به جای درج سوال جدید ، لینک سوالتون رو به افرادی که فکر میکنید میتونن راهنمایی تون کنن پ خ کنید ، در تصحیح پاسخ Creative Boy عزیز هم باید بگم که نیازی به محاسبه ی نماد علمی نیست ! ، خود نوع داده ی Double اگر مقدار رو نتونه نشون بده به صورت یک عدد علمی محاسبه میکنه ، توضیحات بیشتر هم در لینک موجود هست
سلام به همگی
دوستان همگی جوابهای کامل و درستی دادند، اما اصلا مشکلی وجود نداره؛ در واقع اون چیزی که ninjamarket بهش میگن عدد نامفهوم یعنی حاصل 100 * 1000000 که برابر 1.0E8 میشه همون جواب ضرب البته به صورت نماد علمیه.
(1.0E8 یعنی 1.0 * 108)
داشتم یه راه حل پیدا میکردم که دیدم 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
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .