我实际上在我的Android应用程序中使用Math.sin()来计算给定角度的正弦(使用Math.toRadians(angle_in_degrees))。例如,当我想得到Math.cos(90)为0时,结果是6.123233 ... E-17。谢谢你。
答案 0 :(得分:0)
你要从Math.cos(Math.toRadians(90))中得到一个近似值
6.123233 ... E-17 == 0.00000000000000006123233 ...基本上是0
以下链接应该有助于清除编程中双精度/浮点数的精度。 http://www.java67.com/2015/09/float-and-double-value-comparison-in-java-use-relational.html
答案 1 :(得分:0)
对于浮点数,系统通常只能逼近它们的值。例如,系统将返回类似于0.333333的表达式(1.0 / 3)。小数点后面的3s数量会有所不同,具体取决于你是浮点数还是双打数,但它仍然会被限制在某个有限长度内。
如果您只是显示该值,则可以使用String.format("%0.2f", value)
之类的内容限制位数,或使用Math.round()
之类的舍入函数对其进行舍入。
当您需要将值与某些东西进行比较时,会出现棘手的部分。您不能只使用if (value == some_constant)
甚至if (value == some_variable)
。至少,您通常必须使用if (Math.abs(value - some_constant) < 0.001)
之类的东西。 '0.001'的实际值取决于您的特定应用程序的需要,通常定义为命名常量。
对于更复杂的需求,您可以在Floating-Point Guide。
中实施该算法