2017-01-14 92 views
0

我目前正在研究基於網格系統的Traffics仿真。由於某種原因,計算我必須添加多少個圖塊的代碼行總是返回0.我嘗試過沒有變量,但它仍然無效。Java雙重計算問題

double blocksToAdd = o.getVelocity()*((1000/Main.FPS)/1000); 

目前的速度等於1.0F和模擬在10 FPS運行,因此blocksToAdd應該0.1,但它總是返回0

+0

您可以發佈'Main.FPS'聲明? – Tunaki

+1

我認爲你的Main.FPS是整型變量。使其雙倍 –

+0

整數算術可能會造成這種情況。將'1000'改爲'1000.0'以強制浮點運算。 –

回答

1

由於Main.FPSint1000/Main.FPS也是int,等於100。然後你繼續計算100/1000。由於這是一個integer division,只有「整個」部分被採用,給出0

使用浮點文字會導致Java的使用浮點除法,這應該產生正確的結果:

double blocksToAdd = o.getVelocity() * ((1000.0 /Main.FPS)/1000.0); 
// Here --------------------------------------^--------------------^ 
1

最有可能是由於整數除法截斷分數。

用1000.0替換第一個1000,一切都會好的。 (後者是一個浮點雙重字面值,它導致了除法計算的浮點數。)還有其他的補救措施,但我認爲這是最清楚的。