Javascript Math.cos和Math.sin不准确。有什么解决方案吗?

时间:2011-06-03 06:12:52

标签: javascript math

Javascript Math trigonomerial methos返回错误的结果。 试试

alert(Math.sin(Math.PI));

它不会返回0.

也许问题是javascript十进制数精度。是否有任何工作量可以得到正确的结果?

3 个答案:

答案 0 :(得分:13)

但是,它非常非常接近零。 (~10 ^ -16)

alert(Math.sin(Math.PI/2))确实返回1

这只是处理浮点运算时必须注意的事情之一。整个地方都会出现舍入错误。

答案 1 :(得分:0)

您可以使用

Math.sin(Math.PI).toFixed(3) // "0.000"

示例:

const cos = (a) => Math.cos(Math.PI * a / 180); cos(90) // 6.123233995736766e-17

然后您可以使用.toFixed()

cos(90).toFixed(3) // "0.000"

注意

.toFixed()返回字符串,因此您可以使用parseFloat()

将其解析为浮点型

parseFloat(cos(90).toFixed(3)) // 0.000

答案 2 :(得分:-3)

好吧,我想那是因为Math.PI不准确,3.14而不是3.1415926。尝试

alert(Math.sin(3.1415926));

如果仍然不够,你可以尝试在泰勒系列中使用扩展

sin x = x - x^3 / 3! + x^5 / 5! - x^7 / 7! ......