你不角收到-8
,您收到-8.XXXXXXe-17
。最後注意e-17
。這是科學記數法,所以你的號碼實際上是-0.00000000000000008XXXXX
。您可以使用angle.toFixed(20)
查看沒有科學計數的浮點數。數字是您要顯示的小數位數。
爲什麼你會得到如此小的數字,如果你只是增加和減少0.01
?你可以問。發生這種情況是因爲浮點數不準確,因爲小數不可能被「保存到最後」,而不是整數。例如,請考慮1/3
具有無限數量的小數。在這裏,您可以閱讀更多關於JavaScript和浮點精度的信息:Dealing with float precision in Javascript
另一個問題是具有負角(儘管您實際檢查負角度,但仍然很小,但仍爲負值)。發生這種情況是因爲您在增加/減少它之前檢查負角度,所以如果您的乘數爲負數,並且您的角度爲,比如0.0001whatever
(因爲浮點精度問題),它仍然高於零,因此您的乘數爲仍然是負值,但實際上大於你的角度,所以當應用乘數時,角度將爲負值。
我能想到的這種方式來解決這個問題:
let angle = 0
let multiplier = .01
function raf() {
angle = angle+multiplier;
if(angle > 1 || angle < 0) {
multiplier = -multiplier
angle = angle<0?0:1;
}
console.log(angle.toFixed(20))
requestAnimationFrame(raf)
}
requestAnimationFrame(raf)
有了這個,你檢查你的角度是極限后里面做這個工作,所以你會克服精度問題:https://codepen.io/anon/pen/eWppGy
另一種方式可以是打算用它工作,這樣當使用一個整數(因爲他們沒有精度問題,正如我上面所述),併除以100的角度:
let angle = 0
let multiplier = 1
function raf() {
angle = angle+multiplier;
if(angle >= 100 || angle <= 0) {
multiplier = -multiplier;
angle = angle<=0?0:100;
}
console.log(angle/100)
requestAnimationFrame(raf)
}
requestAnimationFrame(raf)
筆:https://codepen.io/anon/pen/XRmmVq
感謝整個計算!我瞭解這個問題,您的解決方案運作良好! :) – Mourtazag
@Mourtazag很高興幫助:P –