Как заставить функцию Tan показывать неопределенное?
Я работаю над приложением Android Calculator, которое может вычислять тригонометрические функции. Я обнаружил, что мой калькулятор показывает:
Tan 90° = 1.633123935319537E16 instead of Tan 90° = undefined
Tan 270° = 5.443746451065124E15 instead of Tan 270° = undefined
Я знаю, что эти значения на самом деле означают undefined
но эти расчеты могут немного запутать пользователей. Я использую Eclipse, чтобы сделать это приложение.
У меня вопрос "Как мне заставить мой калькулятор показывать сообщение?" undefined
для Tan 90°, 270° и других значений, где Tan - бесконечность?".
Это мой код для функции Tan:
ImageButton btnTan;
TextView txtDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTan = (ImageButton) findViewById(R.id.btnTan);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);
btnTan.setOnClickListener(this);
}
Double total = 0.0;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.btnTan) {
if (txtDisplay.getText().equals("")) {
txtDisplay.setText("");
}
else {
double total = 0.0;
total = Math.round(Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
}
3 ответа
Решение
Просто проверьте, равно ли значение градуса 270, 90 или любому другому значению, где тангенс равен NaN
TextView txtDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);
findViewById(R.id.btnTan).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnTan) {
double value = Double.parseDouble(txtDisplay.getText().toString());
if (value % 180 != 0 && value % 90 == 0)
txtDisplay.setText("undefined");
else {
value = Math.round(Math.tan(Math.toRadians(value)));
txtDisplay.setText(String.valueOf(value));
}
}
}
Большое спасибо.
Изменение кода путем изменения
if (txtDisplay.getText().equals("")) {
txtDisplay.setText("");
}
else {
double total = 0.0;
total = Math.round(Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
в
double value = Double.parseDouble(txtDisplay.getText().toString());
if (value % 180 != 0 && value % 90 == 0) {
txtDisplay.setText("undefined");
}
else if (value % 45 == 0) {
double total = 0.0;
total = Math.round(Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else {
total = Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
решил мою проблему.
Итак, мой новый кодекс:
ImageButton btnTan;
TextView txtDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTan = (ImageButton) findViewById(R.id.btnTan);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);
btnTan.setOnClickListener(this);
}
Double total = 0.0;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.btnTan) {
double value = Double.parseDouble(txtDisplay.getText().toString());
if (value % 180 != 0 && value % 90 == 0) {
txtDisplay.setText("undefined");
}
else if (value % 45 == 0) {
double total = 0.0;
total = Math.round(Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else {
total = Math.tan(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
}
Просто проверьте, составляет ли значение 90° или 270°:
double value = Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()));
if (value == Math.abs(90) || value == Math.abs(270)) {
txtDisplay.setText("undefined");
} else {
total = Math.round(Math.tan(value));
txtDisplay.setText(txtDisplay.getText().toString() + total);
}