Java双重计算问题
我目前正在做一个基于网格系统的交通模拟。出于某种原因,计算我必须添加多少块的代码行总是返回0。我在没有变量的情况下尝试过,但仍然不起作用Java双重计算问题,java,Java,我目前正在做一个基于网格系统的交通模拟。出于某种原因,计算我必须添加多少块的代码行总是返回0。我在没有变量的情况下尝试过,但仍然不起作用 double blocksToAdd = o.getVelocity()*((1000/Main.FPS)/1000); 目前,速度等于1.0f,模拟以10 FPS的速度运行,因此blocksToAdd应为0.1,但它总是返回0,这很可能是由于整数除法转换分数 用1000.0替换第一个1000,一切都会好起来。(后者是一个浮点双字,导致以浮点计算除法。)还有
double blocksToAdd = o.getVelocity()*((1000/Main.FPS)/1000);
目前,速度等于1.0f,模拟以10 FPS的速度运行,因此
blocksToAdd
应为0.1
,但它总是返回0
,这很可能是由于整数除法转换分数
用1000.0替换第一个1000,一切都会好起来。(后者是一个浮点双字,导致以浮点计算除法。)还有其他补救措施,但我发现这一种最为明确。最有可能是由于整数除法对分数进行了调整
用1000.0替换第一个1000,一切都会好起来。(后者是一个浮点双字,导致以浮点计算除法。)还有其他补救办法,但我发现这是最清楚的。因为
Main.FPS
是int
,1000/Main.FPS
也是int
,等于100
。然后继续计算100/1000
。由于这是一个示例,因此只取“整体”部分,给出0
使用浮点文字将导致Java使用浮点除法,这将产生正确的结果:
double blocksToAdd = o.getVelocity() * ((1000.0 /Main.FPS ) / 1000.0);
// Here --------------------------------------^--------------------^
由于
Main.FPS
是int
,1000/Main.FPS
也是int
,等于100
。然后继续计算100/1000
。由于这是一个示例,因此只取“整体”部分,给出0
使用浮点文字将导致Java使用浮点除法,这将产生正确的结果:
double blocksToAdd = o.getVelocity() * ((1000.0 /Main.FPS ) / 1000.0);
// Here --------------------------------------^--------------------^
你能发布
Main.FPS
声明吗?我认为你的Main.FPS是整数变量。使其成为双整数可能是导致这种情况的原因。将1000
更改为1000.0
以强制使用浮点运算。您可以发布Main.FPS
声明吗?我认为您的Main.FPS是整数变量。使其成为双整数可能是导致这种情况的原因。将1000.0的1000
更改为强制浮点运算。