There are [many ways that round to the nearest integer](https://en.wikipedia.org/wiki/Rounding#Rounding_to_the_nearest_integer) (all of them are basically the same except on the half-integers). The sum of integers obtained will be close to the sum of the original numbers on average when the distribution of the fraction parts of the numbers are roughly symmetric to $0.5$. One of those methods might be good enough for you in practice.

However, none of the above will ensure "the sum of integers must be as close to the sum of original numbers as possible". To achieve that, we need to keep track of the gap/error between the two sums.

### Offline Method

Suppose a list of numbers $a_1, a_2, \cdots, a_n$ are given. Let  <!-- $f_i=\{a_i\}$, where--> $\{a_i\}=a_i-\lfloor a_i\rfloor$ be the fractional part of $a_i$.

Let $s = \{a_1\} + \{a_i\} + \cdots + \{a_n\}$.
Let $\mathcal R$ be one of the "round half ..." methods above. Then
- round $a_i$ to $\lfloor a_i\rfloor$ for $i\le n-\mathcal R(s)$, 
- round $a_i$ to $\lfloor a_i\rfloor + 1$ for $i\gt n-\mathcal R(s)$.

To be fair, sort $a_i$ by $\{a_i\}$ before rounding so that, for example,  $4.8$ will be round up instead of $7.6$ if one of them should be round up.

### Online Method

Input: a source that produces numbers  
Output: numbers rounded  
Procedure:

1. Let number $gap$ be $0$
2. Pick one of the "round half ..." methods as $\mathcal R$.
3. For each number $num$ in the source:
   1. Let $num{\_}rounded=\mathcal R(gap + num)$. Output $num{\_}rounded$.
   2. Add $num - num{\_}rounded$ to $gap$. 

### Mixed Method

We can mix the offline method and the online method by repeating the following procedure after initializing number $gap=0$.
1. Apply the offline method to the next block of numbers, including $gap$ as a summand for $s$ as well.
2. Add the difference between the sum of the numbers obtained in step 1 and the sum of the original numbers to $gap$.

The size of each block of numbers is up to your choice.