مشکلات برنامه ماشین حساب
با عرض درود فراوان خدمت همه دوستان گرامی
اگر توجه کرده باشید برنامه ماشین حساب آموزش داده شده چند مشکل داره که باعث میشه کار کردن باهاش کمی ناخوش آیند باشه !؟
1. این برنامه با اعداد یک کم بزرگ مشکل داره چه برسه به اعداد خیلی بزرگتر مثلا شما دو عدد زیر رو در هم ضرب کنید و ببینید به چه شکل نمایش داده میشه، !
100 * 1000000
فکر نکنم این عدد خیلی بزرگ هم باشه
2. اعداد در همه جا 0 اعشار رو دارن، حتی اگر محاسبه شما کاملا ساده و بدون اعشار باشه
3. دکمه مساوی و C رو خودم طراحی کردم
آیا هیچ کدوم از دوستان این مشکلات رو رفع کرده ؟ اگر کسی این مشکلات رو رفع کرده لطفا اینجا هم برای ما کمی توضیح بده تا بتونیم استفاده کنیم.
اگر هم استاد بتونن کمی کمک کنن که خیلی بهتر میشه
سلام
بنده این مشکل رو با راهنمایی A.L.U گرامی تونستم برطرف کنم
و
ماشین حسابی که درست کرده بودم در مرحله ساین کردن بود که متاسفانه اکلیپسم به مشکل خورد و کل پروژم به کل پاک شد
دقیقا زمانی که بعد از کلی کار UI اماده شد بود تا راهی بازار بشه رایگان
حیف شد
حالا بگذریم
با اجازه A.L.U گرامی راه حل ایشون رو نقل قول میکنم براتون که با پشت کار به نتیجه خواهید رسید
خوب اگه منظورتون اینه که اگه اعشار 0 بود نشون ندیم ، میتونیم این کار رو بکنیم
- آیا عدد اعشار اش صفر است ؟
- خیر - > عدد را نمایش بده !
- بله -> عدد را به int یا long کست کنید :)
if(value %1==0){
// show value
}
else{
// show casted value
}
سلام دوستان.دیدم بحث مربوط به مشکلات ماشین حساب هستش گفتم این موضوع رو این جا مطرح کنم تا دوستان نظراتشونو درج کنن.البته این مشکل مربوط به ماشین حساب ویندوز هستش.منبع اصلی این مشکل دقیقا معلوم نیست ولی من فک میکنم مربوط به اشتباه در نظر گرفتن اولویت بندی در تابع این دستور باشه.!
مشکل:اگر شما عددی که جذر آن کامل است را در همان عدد به دست آمده کم کنید جواب صفر نمیشود.مثال:
SQR (4) - 2= (-1.068281969439142e-19)
SQR (9) - 3= (1.121252885047248e-19)
SQR (16) - 4= (-4.561669785727164e-20)
دوستان گلم سلام
خوب شما یه چیزی رو یادتون رفته !
اعداد به صورت پیشفرض int در نظر گرفته میشن ، مگر اینکه شما یه پسوند f برای float یا d برای double به اونها بدید :)
وقتی در نوع داده ی double عدد بزرگ به وجود بیاد ، اتوماتیک ، اون عدد به عدد علمی تبدیل میشه ، مثلا خروجی کد جاوا پائین رو ببینید
public class runner {
public static void main(String[] args) {
double a = 999999999999999999999999999999990000000d * 999999999999999999999000000000000d;
System.out.println("" + a);
}
}
ببخشید این دفعه سورس کد رو بهتر فرستادم
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);
}
}
دوست عزیز مشکل برنامه ماشین حساب حل شد لطفا جهت اطلاعات بیشتر به لینک زیر مراجعه فرمایید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .