Java 双精度和整数转换

Java 双精度和整数转换,java,casting,autoboxing,Java,Casting,Autoboxing,我正试图弄明白这一点: double chiSquare = ((double)(hashtable.get(key).intValue()/noWords))/* * Math.log10((NO_DOCUMENTS/all.get(key)))*/; if (key.equals("love")){ System.out.println(hashtable.get(key)); System.out.println(all.get(key));

我正试图弄明白这一点:

double chiSquare = ((double)(hashtable.get(key).intValue()/noWords))/* * Math.log10((NO_DOCUMENTS/all.get(key)))*/;
if (key.equals("love")){
    System.out.println(hashtable.get(key));
    System.out.println(all.get(key));                
    System.out.println(noWords);    
    System.out.println(chiSquare);
    System.out.println((double)1/841);
    System.exit(0);
}
为什么它打印的是chiSquare,打印的是零,而打印的是1/841给出的是双倍值?
由于括号不正确,哈希表是

double chiSquare = ( (double) hashtable.get(key).intValue() )/noWords;

正如@GregS在他的评论中指出的,整数除以整数就是整数。 将其中一个数字转换为双精度将产生您想要的输出

double chiSquare = ((double)hashtable.get(key).intValue())/noWords;
或者,使用Integer上的便利方法将其转换为双精度:

double chiSquare = hashtable.get(key).doubleValue()/noWords;
(double)(1/841)==0,但(double)1/841==1.0/841。你可以找出原因。
Integer#doubleValue()
绝对是一条出路+1.