#java #decimal
#java #десятичная
Вопрос:
Я делаю
Collections.frequency(List<String>, List<String>.get(i)) / List<String>.size()
Результат для приведенного выше вычисления должен быть (например)
0.00631
0.0002378
0.00571
но вместо этого я получаю 0.0
.
Как мне справиться с этим? Я продолжаю получать 0.0
с double
и float
Спасибо
Комментарии:
1. Вам придется быть более конкретным. Возможно, показать какой-нибудь код?
2. Откуда ты берешь 0.0? Отладчик, консоль, файл?
3. Особенно учитывая, что это не так уж много значений после запятой, если смотреть на это в научной нотации:
6.31e-3, 2.378e-4, 5.71e-3
. Как есть, эти значения не должны вызывать проблем, поэтому нам понадобится дополнительная информация.4. Вы используете целые числа для выполнения деления проверьте ответ aioobe
Ответ №1:
Если значения 0.00631
, 0.0002378
и 0.00571
являются ожидаемыми результатами от делений, убедитесь, что вы не выполняете целочисленные деления. То есть, убедитесь, что числитель или знаменатель приведены к значению с плавающей запятой или double.
Вместо
double fraction = someInt / someOtherInt;
вы можете сделать
double fraction = (double) someInt / someOtherInt;
В вашем конкретном случае вы могли бы попробовать что-то вроде
(double) Collections.frequency(list, list.get(i)) / list.size();
Ответ №2:
Используйте BigDecimal
это без какого-либо округления для очень больших или очень маленьких чисел за счет большего потребления памяти и более медленных вычислений. Этот класс необходим для любых финансовых данных.
BigDecimal val = new BigDecimal("10000000000000.0002378");
System.out.println(val);
Комментарии:
1. OP предоставил немного больше информации, и
BigDecimal
кажется ненужным для того, что он делает.