2011-03-10 84 views
2

我試圖弄清楚這一點:雙和整數轉換

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); 
} 

爲什麼打印卡方,打印爲零,而打印八百四十一分之一給人的雙重價值? 哈希表是<String, Integer>

+3

(雙)(841分之1)== 0,但(雙)841分之1== 1.0/841。你可以找出原因。 – 2011-03-10 01:17:51

回答

4

作爲@GregS在他的評論中指出,int除以int是int。 將其中一個數字轉換爲雙精度將產生您想要的輸出。

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

或者,使用基於整數的便利方法將其轉換爲一個雙:

double chiSquare = hashtable.get(key).doubleValue()/noWords; 
+1

'Integer#doubleValue()'絕對是要走的路。 +1 – 2011-03-10 01:32:27

1

因爲括號是不正確的。

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