#java
Столбец 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(); } }
Ответы
Ответ 1
Да, вполне. Операции с числами с плавающей точкой могут приводить к потерям. Вы можете использовать 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/
Комментариев нет:
Отправить комментарий