2017-01-14 12 views
0

私は現在、グリッドシステムに基づいたTrafficsimulationに取り組んでいます。何らかの理由で、私が追加しなければならないタイルの数を計算するコード行は、常に0を返します。私は変数なしでそれを試しましたが、それでも動作しません。Java double calculationの問題

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

現在速度は、1.0Fに等しく、シミュレーションは10 FPSで動作するので、blocksToAdd0.1する必要がありますが、それは常に0を返します。

+0

あなたは 'Main.FPS'宣言を投稿することができますか? – Tunaki

+1

あなたのMain.FPSは整数変数だと思います。これを倍精度にしてください –

+0

整数演算が原因の可能性があります。 '1000'を' 1000.0'に変更して浮動小数点演算を強制します。 –

答えて

1

1000/Main.FPS100に等しいint、である、intあります。その後、100/1000を計算します。これはinteger divisionなので、「全体」の部分だけが取られ、0となります。浮動小数点リテラルを使用して

は、Javaが正しい結果を生成する必要があります浮動小数点除算を使用するようになります:

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

おそらく、整数分裂が部分を切り詰めるためです。

最初の1000を1000.0に置き換えてください。すべて正常です。 (後者は、浮動小数点で計算される浮動小数点の二重リテラルです。)他の救済策もありますが、私はこれを最も明確にすることができます。 Main.FPSので