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

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

ninjamarket  11 سال پیش  11 سال پیش
+2 0

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

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

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

100 * 1000000

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

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

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

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

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

+1 0
شما از INT استفاده می کنید به احتمال زیاد متغیر INT عدد کاملی از محدوده 32768 تا 32767 است . LONG یک عدد کامل از محدوده منفی 2147483648 تا مثبت 2147483647 است. (11 سال پیش)
0 0
دوست عزیز بنده طبق گفته استاد از double استفاده کردم که از long هم بزرگ تر هست، باز هم همیشن مشگل وجود داره. (11 سال پیش)
 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
آس  11 سال پیش
+3 0

سلام

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

حالا بگذریم

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

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

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

متن اصلی پاسخ

0 0
دوست عزیز این مشکل اعشار درست شد، مشکل تعداد بزرگ رو چه طوری حل کردین ؟ (11 سال پیش)
0 0
دوست عزیز این مشکل اعشار درست شد، مشکل اعداد بزرگ رو چه طوری حل کردین ؟ (11 سال پیش)
0 0
مجتبی جان لطفا جواب این مشکل رو هم در همین جا درج کن.از مدیرای دیگر هم خواهش میکنم نظراتشونو برای حل این مشکل بگن. (11 سال پیش)
پاسخ به سوال 
ATRAS  11 سال پیش
+1 0

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

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

 SQR (4) - 2= (-1.068281969439142e-19)
SQR (9) - 3= (1.121252885047248e-19)
SQR (16) - 4= (-4.561669785727164e-20)
0 0
خیلی عجیبه !!!! (11 سال پیش)
0 0
عجیب برا یک لحظشه.ماکروسافته دیگه چی کار میشه کرد! (11 سال پیش)
پاسخ به سوال 
مجتبی یگانه  11 سال پیش
+2 0

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

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

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

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

public class runner {

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

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

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

 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);
    }
}
0 0
اقا به نتیجه نرسیدین؟! A.L.U گرامی میشه لطفا یکم بیشتر راهنمایی کنید مرسی (11 سال پیش)
پاسخ به سوال 
ninjamarket  11 سال پیش
+1 0

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

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


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