Обработка чисел с большим количеством значений после десятичной в Java - PullRequest
4 голосов
/ 09 мая 2011

Я делаю

 Collections.frequency(List<String>, List<String>.get(i)) / List<String>.size()

Выход для вышеуказанного расчета должен быть (например)

0.00631
0.0002378
0.00571

но я получаю 0.0, вместо этого. Как мне справиться с этим? Я продолжаю получать 0.0 с double и float

Спасибо

Ответы [ 2 ]

7 голосов
/ 09 мая 2011

Если значения 0.00631, 0.0002378 и 0.00571 являются ожидаемыми результатами от делений, убедитесь, что вы не выполняете целочисленные деления.То есть, обязательно приведите числитель или знаменатель к числу с плавающей или двойной.

Вместо

double fraction = someInt / someOtherInt;

вы можете сделать

double fraction = (double) someInt / someOtherInt;

В вашем конкретномслучай, вы можете попробовать что-то вроде

(double) Collections.frequency(list, list.get(i)) / list.size();
0 голосов
/ 09 мая 2011

Используйте BigDecimal, который не вводит никакого округления для очень больших или очень маленьких чисел за счет большего потребления памяти и более медленных вычислений. Этот класс является обязательным для любых финансовых данных.

BigDecimal val = new BigDecimal("10000000000000.0002378");
System.out.println(val);
...