двойное и целочисленное преобразование - PullRequest
2 голосов
/ 10 марта 2011

Я пытаюсь понять это:

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 дает двойное значение? Хеш-таблица имеет значение <String, Integer>

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Как @GregS указал в своем комментарии, int, деленное на int, является int.Преобразование одного из чисел в двойное приведет к получению желаемого результата.

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

Или используйте удобный метод Integer, чтобы преобразовать его в двойное:

double chiSquare = hashtable.get(key).doubleValue()/noWords;
1 голос
/ 10 марта 2011

Поскольку круглые скобки неверны.

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