Столбец excel содержит числа в диапазоне от 1 до 0.0001. Когда оператор в ручную делает суммирование стобца примерно из 10-30 строк получается число 15,028
Я делаю автоматизацию. Мне в программу приходят данные из БД ОРАКЛ. Информация приходит в виде строк. Я преобразую строки в тип Double и суммирую. Сумма тех же строк дает у меня 13,9
Может ли Double округлять значения из-за чего информация теряется и как с этим бороться?
for (String[] rowx : СписокмассивовстрокИзОракл) {
String key = "комбинация данных по логике автоматизации";
try {
if (mapMass.containsKey(key)) {
try {
double src = 0.0;
try {
src = Double.valueOf(rowx[timeFakt]); //косяк, данные хранящиеся в ячейке timeFakt могут быть типа 0,0028 или 0,0000034. и они округляются.
} catch (Exception e) {
e.printStackTrace();
}
total = Double.valueOf(mapMassTwo.get(key)) + src;
String tf = String.valueOf(total);
mapMassTwo.put(key, tf);
total = 0.0;
} catch (Exception e) {
e.printStackTrace();
}
} else {
String tf = rowx[timeFakt];
mapMass.put(key, tf );
}
} catch (Exception e) {
e.printStackTrace();
}
}
Да, вполне. Операции с числами с плавающей точкой могут приводить к потерям. Вы можете использовать BigDecimal
:
BigDecimal sum = new BigDecimal(0);
while (thereIsNumbers()) {
BigDecimal number = new BigDecimal(getNextNumberAsStringFromExcel());
sum = sum.add(number);
}
System.out.println(sum);
При создании BigDecimal
важно передавать в конструктор именно строку. Если вы передадите туда представление вашей строки уже в виде double
, то могут быть погрешности.
Немного про погрешности: https://habrahabr.ru/post/219595/
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть ли быстрый способ запустить командно одну из закладок Google Chrome?
Есть Tomcat 8 + сервлеты, IDE - Eclipse, ОС - Debian 9Из сервлетов посылаю GET-запрос на удаленный сервер (указав кодировку в запросе