我已经在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.
答案 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中执行整数除法,这会产生一个整数,因此除法的任何小数部分都会被截断。
要获得浮点商,首先将其中一个变量转换为float
或double
,以便进行浮点除法。
((float) xandy / count)
整数除法向0舍入。也就是说,生成的商为 操作数n和d是二进制数字提升后的整数 (§5.6.2)是一个整数值q,其幅度尽可能大 同时满足| d·q | ≤| n |。此外,当| n |时,q为正≥| d | 并且n和d具有相同的符号,但是当| n |时q为负≥| d |和n 并且d有相反的符号。
将其中一个投放到float
就足够了。 Java会将另一个操作数提升为float
以匹配类型,然后执行除法。