如何获得用户友好的正弦函数值?

时间:2014-08-17 14:47:47

标签: java android calculator trigonometry

我正在开发一个可以计算三角函数的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);
    }
}

2 个答案:

答案 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);
        }
    }