360度的正弦非零出现

时间:2013-03-07 13:23:42

标签: java floating-point

我有这个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。为什么这不是零?

2 个答案:

答案 0 :(得分:4)

处理浮点值时,应使用abs(sin360 - 0) < delta(其中delta非常小,如0.0000001)而不是sin360 == 0。这是浮点内部表示问题。 What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:0)

您始终可以使用小数格式:

DecimalFormat format = new DecimalFormat();
format.setMaximumFractionDigits(2);
System.out.println(format.format(bDecimal1));