Java 360度的正弦是非零的

Java 360度的正弦是非零的,java,floating-point,Java,Floating Point,我有这个java代码来计算sin(360): 我希望sin(360)应该正好是0 但我的结果不是零:-0.0000000000000002449294。为什么不是零?在处理浮点值时,应该使用abs(sin360-0)

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

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


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

在处理浮点值时,应该使用
abs(sin360-0)
(其中delta非常小,如0.0000001),而不是
sin360==0
。这是浮点内部表示问题。

处理浮点值时,应使用
abs(sin360-0)
(其中delta非常小,如0.0000001),而不是
sin360==0
。这是浮点内部表示问题。

您可以始终使用十进制格式:

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

您可以始终使用十进制格式:

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

为什么您会建议评估这种比较?问题中的代码不包含任何浮点比较,问题中也没有提到要比较浮点值。这里没有任何东西表明提问者想要进行这样的比较。他们在问为什么他们得到了一个他们没有预料到的价值。评估您建议的比较不会将值更改为他们期望的值,也不会提高浮点精度。在这种情况下,它没有任何作用。你为什么建议评估这种比较?问题中的代码不包含任何浮点比较,问题中也没有提到要比较浮点值。这里没有任何东西表明提问者想要进行这样的比较。他们在问为什么他们得到了一个他们没有预料到的价值。评估您建议的比较不会将值更改为他们期望的值,也不会提高浮点精度。在这种情况下,它毫无用处。为什么要否决它?使用格式化程序快速四舍五入到所需的小数位数是完全有效的。为什么要对此进行向下投票?使用格式化程序快速四舍五入到所需的小数位数是完全有效的。