我目前正在研究基於網格系統的Traffics仿真。由於某種原因,計算我必須添加多少個圖塊的代碼行總是返回0.我嘗試過沒有變量,但它仍然無效。Java雙重計算問題
double blocksToAdd = o.getVelocity()*((1000/Main.FPS)/1000);
目前的速度等於1.0F和模擬在10 FPS運行,因此blocksToAdd
應該0.1
,但它總是返回0
。
我目前正在研究基於網格系統的Traffics仿真。由於某種原因,計算我必須添加多少個圖塊的代碼行總是返回0.我嘗試過沒有變量,但它仍然無效。Java雙重計算問題
double blocksToAdd = o.getVelocity()*((1000/Main.FPS)/1000);
目前的速度等於1.0F和模擬在10 FPS運行,因此blocksToAdd
應該0.1
,但它總是返回0
。
由於Main.FPS
爲int
,1000/Main.FPS
也是int
,等於100
。然後你繼續計算100/1000
。由於這是一個integer division,只有「整個」部分被採用,給出0
。
使用浮點文字會導致Java的使用浮點除法,這應該產生正確的結果:
double blocksToAdd = o.getVelocity() * ((1000.0 /Main.FPS)/1000.0);
// Here --------------------------------------^--------------------^
最有可能是由於整數除法截斷分數。
用1000.0替換第一個1000,一切都會好的。 (後者是一個浮點雙重字面值,它導致了除法計算的浮點數。)還有其他的補救措施,但我認爲這是最清楚的。
您可以發佈'Main.FPS'聲明? – Tunaki
我認爲你的Main.FPS是整型變量。使其雙倍 –
整數算術可能會造成這種情況。將'1000'改爲'1000.0'以強制浮點運算。 –