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