Java做数学不像预期的那样

时间:2014-02-02 12:49:22

标签: java math rounding-error

我对Java有这个非常奇怪的问题。基本上,这是正在发生的事情:

 int i = (int) Math.ceil((30 * 50) / 1000);

相同
 int i = (int) Math.ceil(1.5);

但它不返回2,它返回1!但是,第二行确实返回2!这真的很奇怪......

如果有帮助,这是实际的代码行:

            pStats.setPlayerEnergy(
                player,
                pStats.getPlayerEnergy(player)
                        + (int) Math.ceil((pStats.getPlayerFoodTick(player) * pStats
                                .getPlayerHydrationTick(player)) / 1000));

有没有人知道这里发生了什么以及如何解决它?

2 个答案:

答案 0 :(得分:4)

这是Integer部门。在Java中:

(30 * 50)/ 1000 = 1

int i = (int) Math.ceil((30.0 * 50) / 1000);

会给你预期的结果。

答案 1 :(得分:1)

整数/整数将给你整数值使任何值分母或分子作为浮点数你会得到答案

int i = (int) Math.ceil((30 * 50) / 1000.0);

                or

int i = (int) Math.ceil((30.0 * 50) / 1000);

                or 

int i = (int) Math.ceil((30 * 50.0) / 1000);