Проверял BigDecimal, цифры заходят верно. Вручную прописывал строку как в примере в несколько строк - вывод верный.
П.С. Решал через браузер (не было возможности через IDE) так-что не было возможности протестить и без Debug'а.
П.С.С. dArr - лишний, удалил.
package com.javarush.task.task18.task1820;
import java.io.*;
import java.util.regex.*;
import java.util.*;
import java.math.*;
/*
Округление чисел
*/
public class Solution {
public static void main(String[] args) {
String[] filesName = getFilesName(2);
StringBuilder str = new StringBuilder();
try {
FileInputStream fis = new FileInputStream(filesName[0]);
FileOutputStream fos = new FileOutputStream(filesName[1]);
while (fis.available()>0){
str.append((char)fis.read());
}
Pattern p = Pattern.compile("(\\-|\\b)\\d+\\.\\d+");
Matcher m = p.matcher(str.toString());
ArrayList<BigDecimal> dArr= new ArrayList<>();
while (m.find()){
BigDecimal bd = new BigDecimal(Double.parseDouble(m.group()));
if (bd.doubleValue()<0) {
fos.write((bd.setScale(0,BigDecimal.ROUND_HALF_DOWN).toString()+" ").getBytes());
} else {
fos.write((bd.setScale(0,BigDecimal.ROUND_HALF_UP).toString()+" ").getBytes());
}
}
fis.close();
fos.close();
} catch (IOException e){}
}
public static String[] getFilesName(int numOfFiles){
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
String[] strArr = new String[numOfFiles];
try {
for (int i=0;i<strArr.length;i++){
strArr[i]=buf.readLine();
}
buf.close();
} catch (IOException e) {}
return strArr;
}
}