我正在开发一个可以计算三角函数的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);
}
}
答案 0 :(得分:1)
只需检查度数值是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));
}
}
}
答案 1 :(得分:0)
非常感谢。
通过更改
修改代码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);
}
}
答案 2 :(得分:-1)
只需检查值是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);
}