0

我有这个java代码来计算sin(360):

if(re.equals(" sin "))
{
    try{
        String next=data.get(i+1);
        v1 = Double.parseDouble(next);
        double degreess = v1;
        double radianss = Math.toRadians(degreess);

        BigDecimal bDecimal1 = new BigDecimal(
            Math.sin(radianss), MathContext.DECIMAL32);

        re=""+bDecimal1;
        //re=""+Math.sin(Math.toRadians(Double.valueOf(next)));
        i++;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

我希望sin(360)应该正好是 0。

但我的结果是非零:-0.0000000000000002449294。为什么这不是零?

4

2 回答 2

4

在处理浮点值时,您应该使用abs(sin360 - 0) < delta(其中 delta 非常小,如 0.0000001) 而不是sin360 == 0. 这是浮点内部表示问题。 每个计算机科学家都应该知道的关于浮点运算的知识

于 2013-03-07T13:30:37.347 回答
0

你总是可以使用十进制格式:

DecimalFormat format = new DecimalFormat();
format.setMaximumFractionDigits(2);
System.out.println(format.format(bDecimal1));
于 2013-03-07T13:38:54.440 回答