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

مشکلات برنامه ماشین حساب

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

با عرض درود فراوان خدمت همه دوستان گرامی

اگر توجه کرده باشید برنامه ماشین حساب آموزش داده شده چند مشکل داره که باعث میشه کار کردن باهاش کمی ناخوش آیند باشه !؟

1. این برنامه با اعداد یک کم بزرگ مشکل داره چه برسه به اعداد خیلی بزرگتر مثلا شما دو عدد زیر رو  در هم ضرب کنید و ببینید به چه شکل نمایش داده میشه، !

100 * 1000000

فکر نکنم این عدد خیلی بزرگ هم باشه

2. اعداد در همه جا 0 اعشار رو دارن، حتی اگر محاسبه شما کاملا ساده و بدون اعشار باشه

3. دکمه مساوی و C رو خودم طراحی کردم

آیا هیچ کدوم از دوستان این مشکلات رو رفع کرده ؟ اگر کسی این مشکلات رو رفع کرده لطفا اینجا هم برای ما کمی توضیح بده تا بتونیم استفاده کنیم.

اگر هم استاد بتونن کمی کمک کنن که خیلی بهتر میشه

نظرات

Mhaghshenas 12 سال پیش
شما از INT استفاده می کنید به احتمال زیاد متغیر INT عدد کاملی از محدوده 32768 تا 32767 است . LONG یک عدد کامل از محدوده منفی 2147483648 تا مثبت 2147483647 است.
ninjamarket 12 سال پیش
دوست عزیز بنده طبق گفته استاد از double استفاده کردم که از long هم بزرگ تر هست، باز هم همیشن مشگل وجود داره.

پاسخ‌ها 5

آس 12 سال پیش

سلام

بنده این مشکل رو با راهنمایی A.L.U گرامی تونستم برطرف کنم
و
ماشین حسابی که درست کرده بودم در مرحله ساین کردن بود که متاسفانه اکلیپسم به مشکل خورد و کل پروژم به کل پاک شد
دقیقا زمانی که بعد از کلی کار UI اماده شد بود تا راهی بازار بشه رایگان
حیف شد

حالا بگذریم

با اجازه A.L.U گرامی راه حل ایشون رو نقل قول میکنم براتون که با پشت کار به نتیجه خواهید رسید

خوب اگه منظورتون اینه که اگه اعشار 0 بود نشون ندیم ، میتونیم این کار رو بکنیم

  1. آیا عدد اعشار اش صفر است ؟
  2. خیر - > عدد را نمایش بده !
  3.  بله   -> عدد را به int یا long کست کنید :)
    if(value %1==0){
    // show value
    }
    else{
    // show casted value
    }

متن اصلی پاسخ

نظرات

ninjamarket 12 سال پیش
دوست عزیز این مشکل اعشار درست شد، مشکل تعداد بزرگ رو چه طوری حل کردین ؟
ninjamarket 12 سال پیش
دوست عزیز این مشکل اعشار درست شد، مشکل اعداد بزرگ رو چه طوری حل کردین ؟
ATRAS 12 سال پیش
مجتبی جان لطفا جواب این مشکل رو هم در همین جا درج کن.از مدیرای دیگر هم خواهش میکنم نظراتشونو برای حل این مشکل بگن.
ATRAS 12 سال پیش

سلام دوستان.دیدم بحث مربوط به مشکلات ماشین حساب هستش گفتم این موضوع رو این جا مطرح کنم تا دوستان نظراتشونو درج کنن.البته این مشکل مربوط به ماشین حساب ویندوز هستش.منبع اصلی این مشکل دقیقا معلوم نیست ولی من فک میکنم مربوط به اشتباه در نظر گرفتن اولویت بندی در تابع این دستور باشه.!

مشکل:اگر شما عددی که جذر آن کامل است را در همان عدد به دست آمده کم کنید جواب صفر نمیشود.مثال:

 SQR (4) - 2= (-1.068281969439142e-19)
SQR (9) - 3= (1.121252885047248e-19)
SQR (16) - 4= (-4.561669785727164e-20)

نظرات

***ali*** 12 سال پیش
خیلی عجیبه !!!!
ATRAS 12 سال پیش
عجیب برا یک لحظشه.ماکروسافته دیگه چی کار میشه کرد!
مجتبی یگانه 12 سال پیش

دوستان گلم سلام

  خوب شما یه چیزی رو یادتون رفته !

اعداد به صورت پیشفرض int در نظر گرفته میشن ، مگر اینکه شما یه پسوند f برای float یا d برای double به اونها بدید :)

وقتی در نوع داده ی double عدد بزرگ به وجود بیاد ، اتوماتیک ، اون عدد به عدد علمی تبدیل میشه ، مثلا خروجی کد جاوا پائین رو ببینید

public class runner {

    public static void main(String[] args) {
        double a = 999999999999999999999999999999990000000d * 999999999999999999999000000000000d;
        System.out.println("" + a);
    }

}

نظرات

ninjamarket 12 سال پیش
دوست عزیز در کل برنامه ماشین حساب از متغیر های double استفاده کردم بازم هم مشکل دارم در زمانی که با متغیرها به صورت زیر کار میکنیم که دیگه نمیشه براش پسوند گذاشت. double x=100 double y=1000000 double z=0 z= x * y اینجا به صورت دستی دو مقدار رو وارد کردم اما تو برنامه ماشین حساب کاربر این مقادیر رو وارد می کنه با تشکر
مجتبی یگانه 12 سال پیش
مهندس اصلا توضیحات رو خوندی ؟! ، عدد رو به صورت 100000 وارد کردی ، یه d بزار آخرش
ninjamarket 12 سال پیش
دوست عزیز تو این برنامه نمیشه عدد بزارم، چون کاربر عدد رو وارد میکنه من فقط با اسم متغیر ها کار دارم اون یک مثال بود، به متن بنده توجه بفرمایید. در اصلش میشه double x; double y double z z=x*y حالا شما d رو اضافه کن جوری که کامپایلر به شما ایراد نگیره، اگر من خودم از داخل برنامه اعداد رو وارد می کردم حرف شما درست بود که این رو از قبل هم میدونستم.
مجتبی یگانه 12 سال پیش
خیلی ساده ! ، با یکم فکر ! ، اونجایی که شما میخواین متن رو از editText بخونین و پارس کنید ، به جای intiger.parseInt از Double.parseDouble استفاده کنید :)
ninjamarket 12 سال پیش
دوست عزیز اینها همش مطالب پیش پا افتاده هستن، همه اینها رو استاد قبلا گفتن و بنده هم انجام دادم، سورس ماشین حساب استاد رو هم امتحات کردم مشکل داشت. اگر میتونید یک بار سورس رو نگاه کنید.
مجتبی یگانه 12 سال پیش
متاسفانه امکان برسی سورس رو ندارم ، اما در کل میشه این کار رو انجام داد ، دقیقا همونطور که گفتم !
ninjamarket 12 سال پیش
دوست عزیز از وقتی که گذاشتید متشکرم، اما اینها مشکل این برنامه رو حل نمیکنن، فکر کنم آخرش خود استاد باید این مشکل رو حل کنن.
مجتبی یگانه 12 سال پیش
خواهش میکنم ، اما از نظر من این مشکل حل شده است
ninjamarket 12 سال پیش
ای کاش به سورس دسترسی داشتید تا متوجه می شدید مشکل حل نشده
مجتبی یگانه 12 سال پیش
تو ورژن بعدیم این قابلیت اضافه میشه D: ، شما سورس رو تو سوالتون درج کنید که همه بتونن برسی کنن
ninjamarket 12 سال پیش

ببخشید این دفعه سورس کد رو بهتر فرستادم

 package com.uncocoder.course.app.calculator;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class CalculatorActivity extends Activity {

    public String   lastOperator;
    public Double   lastNumber;
    public boolean  mustClearLcd;
    public boolean  mustOverrideOperator;
    public Typeface lcdFont;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lcdFont = Typeface.createFromAsset(getAssets(), "lcd" + ".ttf");

        Button btn0 = (Button) findViewById(R.id.btn0);
        Button btn1 = (Button) findViewById(R.id.btn1);
        Button btn2 = (Button) findViewById(R.id.btn2);
        Button btn3 = (Button) findViewById(R.id.btn3);
        Button btn4 = (Button) findViewById(R.id.btn4);
        Button btn5 = (Button) findViewById(R.id.btn5);
        Button btn6 = (Button) findViewById(R.id.btn6);
        Button btn7 = (Button) findViewById(R.id.btn7);
        Button btn8 = (Button) findViewById(R.id.btn8);
        Button btn9 = (Button) findViewById(R.id.btn9);
        Button btnPlus = (Button) findViewById(R.id.btnPlus);
        Button btnMinus = (Button) findViewById(R.id.btnMinus);
        Button btnDevide = (Button) findViewById(R.id.btnDevide);
        Button btnMultiply = (Button) findViewById(R.id.btnMultiply);
        Button btnEqual = (Button) findViewById(R.id.btnEqual);
        Button btnPoint = (Button) findViewById(R.id.btnPoint);

        final TextView txtResult = (TextView) findViewById(R.id.txtResult);
        final TextView txtMini = (TextView) findViewById(R.id.txtMini);

        txtResult.setTypeface(lcdFont);
        txtMini.setTypeface(lcdFont);

        OnClickListener operatorClickListener = new OnClickListener() {

            @Override
            public void onClick(View view) {
                double number = Double.parseDouble(txtResult.getText().toString());
                Button btn = (Button) view;
                String operator = btn.getText().toString();

                mustClearLcd = true;

                if (mustOverrideOperator) {
                    lastOperator = operator;

                    String oldMiniText = txtMini.getText().toString();

                    String croppedString = oldMiniText.substring(0, oldMiniText.length() - 1);
                    txtMini.setText(croppedString + operator);

                    return;
                }

                String oldMiniText = txtMini.getText().toString();
                txtMini.setText(oldMiniText + number + operator);

                mustOverrideOperator = true;

                if (lastOperator == null) {
                    lastNumber = number;
                } else {
                    double result = 0;
                    if (lastOperator.equals("/")) {
                        result = lastNumber / number;
                    } else if (lastOperator.equals("*")) {
                        result = lastNumber * number;
                    } else if (lastOperator.equals("+")) {
                        result = lastNumber + number;
                    } else if (lastOperator.equals("-")) {
                        result = lastNumber - number;
                    } else if (lastOperator.equals("=")) {

                    }

                    txtResult.setText("" + result);
                    lastNumber = result;
                }

                lastOperator = operator;
            }
        };

        OnClickListener numberClickListener = new OnClickListener() {

            @Override
            public void onClick(View view) {
                mustOverrideOperator = false;
                /*
                switch (view.getId()) {
                    case R.id.btn0:
                        break;
                        
                    case R.id.btn1:
                        break;
                }
                */

                Button btn = (Button) view;
                String btnText = btn.getText().toString();
                String oldText = txtResult.getText().toString();

                if (mustClearLcd) {
                    txtResult.setText(btnText);
                    mustClearLcd = false;
                    return;
                }

                if (btnText.equals(".")) {
                    if ( !oldText.contains(".")) {
                        txtResult.setText(oldText + btnText);
                        return;
                    }

                    return;
                }

                if (oldText.equals("0")) {
                    txtResult.setText(btnText);
                } else {
                    if (oldText.length() < 10) {
                        txtResult.setText(oldText + btnText);
                    }
                }
            }
        };

        btnPlus.setOnClickListener(operatorClickListener);
        btnMinus.setOnClickListener(operatorClickListener);
        btnEqual.setOnClickListener(operatorClickListener);
        btnDevide.setOnClickListener(operatorClickListener);
        btnMultiply.setOnClickListener(operatorClickListener);

        btnPoint.setOnClickListener(numberClickListener);
        btn0.setOnClickListener(numberClickListener);
        btn1.setOnClickListener(numberClickListener);
        btn2.setOnClickListener(numberClickListener);
        btn3.setOnClickListener(numberClickListener);
        btn4.setOnClickListener(numberClickListener);
        btn5.setOnClickListener(numberClickListener);
        btn6.setOnClickListener(numberClickListener);
        btn7.setOnClickListener(numberClickListener);
        btn8.setOnClickListener(numberClickListener);
        btn9.setOnClickListener(numberClickListener);
    }
}

نظرات

آس 12 سال پیش
اقا به نتیجه نرسیدین؟! A.L.U گرامی میشه لطفا یکم بیشتر راهنمایی کنید مرسی
ninjamarket 12 سال پیش

دوست عزیز مشکل برنامه ماشین حساب حل شد لطفا جهت اطلاعات بیشتر به لینک زیر مراجعه فرمایید

رفع مشکل ماشین حساب در کار با اعداد برزگ

نظرات


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