我正在开发一个可以计算三角函数的android Calculator应用程序。
我的问题是"如何让我的计算器显示正弦函数的正确值?"即; Sin 90° = 1
,但它显示Sin 90° = 0.893996663600
的值。我正在使用Eclipse制作这个应用程序。
这是我的正弦函数代码:
ImageButton btnSin;
TextView txtDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSin = (ImageButton) findViewById(R.id.btnSin);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);
btnSin.setOnClickListener(this);
}
Double total = 0.0;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.btnSin) {
if (txtDisplay.getText().equals("")) {
txtDisplay.setText("");
}
else {
total = Math.sin(Double.parseDouble(txtDisplay.getText().toString()));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
}
答案 0 :(得分:3)
Math.sin()期望以弧度为单位的参数,以便您可以使用
Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())));
如果您需要转换相反的方式,则可以使用
Math.toDegrees(double radians)
公式为:
radians = degrees * (π/180)
degrees = radians * (180/π)
答案 1 :(得分:0)
非常感谢。
通过更改
修改代码if (txtDisplay.getText().equals("")) {
txtDisplay.setText("");
}
else {
total = Math.sin(Double.parseDouble(txtDisplay.getText().toString()));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
到
double value = Double.parseDouble(txtDisplay.getText().toString());
if (value % 90 == 0) {
double total = 0.0;
total = Math.round(Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else if (value % 60 != 0 && value % 30 == 0) {
total = Math.floor(Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())))) + 0.5;
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else {
total = Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
解决了我的问题。
所以,我的新代码是:
ImageButton btnSin;
TextView txtDisplay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSin = (ImageButton) findViewById(R.id.btnSin);
txtDisplay = (TextView) findViewById(R.id.txtDisplay);
btnSin.setOnClickListener(this);
}
Double total = 0.0;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (v.getId() == R.id.btnSin) {
double value = Double.parseDouble(txtDisplay.getText().toString());
if (value % 90 == 0) {
double total = 0.0;
total = Math.round(Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString()))));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else if (value % 60 != 0 && value % 30 == 0) {
total = Math.floor(Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())))) + 0.5;
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
else {
total = Math.sin(Math.toRadians(Double.parseDouble(txtDisplay.getText().toString())));
txtDisplay.setText("");
txtDisplay.setText(txtDisplay.getText().toString() + total);
}
}