Math.cos, sin and tan returning inaccurate values

2020-05-08 10:15发布

问题:

I am working on a calculator with a GUI in Java. The project is done, however the trigonometric functions do not work properly. This is the method for the cos function:

public void actionPerformed(ActionEvent evt) {
input = Double.valueOf(Display.getText());
ans = Math.cos(Math.toRadians(input));
Display.setText(String.valueOf(ans));
} 

Where "Display" is the text area. The problem is that the functions return inaccurate values. For example, when I enter 90 and click the cos button, the number 6.123233995736766E-17 is returned. The sin and tan buttons are also inaccurate in a similar manner (I can explain further if necessary). Where is the code going wrong, and how can I solve this

回答1:

The value returned by cos is not inaccurate. When you input 90, and convert it to radian using the method Math.toRadians, the result is not exactly pi/2, and hence when you pass this non-exact value to cos it gives a non-exact value. Peek here to hear from the legend :-)

As for your situation, you need to round the result of cos. Take a look here

You could do something like this:

public void actionPerformed(ActionEvent evt) {
    input = Double.valueOf(Display.getText());
    ans = Math.cos(Math.toRadians(input));
    Display.setText(String.format("%.6f", ans));
}