无法将double转换为int

时间:2015-07-27 19:19:30

标签: java casting floating-point

我的脚本中有一个问题,它说我无法将双精度转换为整数...

这里是蝙蝠中记录错误的位置:

cm.getPlayer().yellowMessage("You have gained " + 
                getJQ.getCurrentMap() + " JQ points!");

错误不在方法getCurrentMap()中,而是在这里......

public int getCurrentMap() {
    return maps.get((level - 1));
}

等级是一个整数,每当玩家升级一个等级时它就会递增。我不明白的是我是如何收到这个错误的。当我打印出List<Integer> maps时,我会得到一个数字列表。我不明白错误。

以下是我如何宣布:

private int level = 0;

错误图片: Bat Error

代码: Code - Look at the methods getCurrentMap and the declaration of maps in the file. Ignore everything else.

Source Code: As you can see level is declared as an int, and getCurrentMap() only details with integers. There main lines that deal with this error are lines 29-32, and lines 59-61, where I push an array with a random value.

3 个答案:

答案 0 :(得分:2)

如果leveldouble,那么结果也是双倍的。 Java不会将其转换为整数,因为这会丢失信息。所以你必须明确说明:

return maps.get((int) (level - 1));

如果从JavaScript检索level(或任何其他int),则代码甚至不会被执行。您正在将double从JavaScript分配给int,因此它甚至从未到达您的Java代码。接受JavaScript中的double,然后使用(int)进行转换将其转换为整数。

如果您想要向上舍入而不是向下舍入,则可能需要先使用Math.ceil或其他舍入方法。

答案 1 :(得分:1)

如果要从double创建整数,请使用Math.ceilMath.round之类的函数。否则,应该如何进行转换是不明确的。

答案 2 :(得分:1)

JavaScript没有整数,一切都是浮点值。所以在某个地方你有一些浮点值,你可以从JavaScript中得到一个整数。如果发生这种情况,你的问题就不清楚了。

将某些内容转换为不属于其子类的类将失败; Double和Integer都是Number的子类,您可以将Double转换为Number但不转换为Integer。如果你想要转换为整数的double值,你可以在对象包装器上调用Double的转换方法:

new java.lang.Double(10.001D).intValue();

返回整数部分并丢弃任何小数部分。