将两个浮动值除以零

时间:2013-09-20 19:29:03

标签: java double

我已经在python和scala世界中待了一段时间,所以没有回复或解释器真的给了我调试的噩梦。我有以下代码:

int count = someInteger;
for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
    if(!entry.getKey().equals("20") && top5 < 5) {
        String movie = entry.getKey();
        int xandy = entry.getValue();
        System.out.println(movie + "," + Float.toString(xandy / count));
        top5 += 1;
    }
}

这里的问题是我从分裂中得到零。我以为我已正确处理类型变量。我已经尝试了所提供的答案,但仍然无效,但问题仍然是零:

这可能导致问题:

Note: Recompile with -Xlint:unchecked for details.

2 个答案:

答案 0 :(得分:2)

试试这个:

int count = someInteger;
for (Map.Entry<String, Integer> entry : myMap.entrySet()) {
    if(!entry.getKey().equals("20") && top5 < 5) {
        String movie = entry.getKey();
        int xandy = entry.getValue();
        System.out.println(movie + "," + Float.toString((float)xandy / (float)count));
        top5 += 1;
    }
}

注意xandy和count

的浮动转换

答案 1 :(得分:1)

您正在Java中执行整数除法,这会产生一个整数,因此除法的任何小数部分都会被截断。

要获得浮点商,首先将其中一个变量转换为floatdouble,以便进行浮点除法。

((float) xandy / count)

根据JLS, Section 15.17.2

  

整数除法向0舍入。也就是说,生成的商为   操作数n和d是二进制数字提升后的整数   (§5.6.2)是一个整数值q,其幅度尽可能大   同时满足| d·q | ≤| n |。此外,当| n |时,q为正≥| d |   并且n和d具有相同的符号,但是当| n |时q为负≥| d |和n   并且d有相反的符号。

将其中一个投放到float就足够了。 Java会将另一个操作数提升为float以匹配类型,然后执行除法。