Floats and Doubles are limited. They are only able to accurately represent fractional portions of numbers as a sum of base two fractions. The fractional portion can be fully represented as the sum of some series like:
1/2 + 0/4 + 1/8 + 1/16 + ...
Unfortunately there are a large number of commonly used numbers which never can be fully represented, like:
1/3, 1/7, 1/9, 5/11 etc.
You must consider whether the number can accurately be represented before you worry about rounding. If this type of accuracy is of extreme importance, then you need to look to a non-Float or non-Double solution.
There are binary decimal libraries which will accurately perform such calculations. They tend to be slower to compute, because there is no specialized hardware to accelerate their calculations. Also, they tend to take up more memory, because you are essentially storing a list of digits.
After you can represent the number you want to the detail you wish, then a rounding solution is simple. Odds are you won't even need a rounding solution; because, the main reason you're trying to round in this case is due to the float not being able to properly represent your value.