It looks that taking this issue into consideration is too much burden with small benefit for very special use cases. At this moment I agree that it would be over-engineering.
Let's just leave this issue open to implementations. When the demand arises, another srfi to provide sophisticated 'numeric' procedure can be written.
I suggest to add explanation in the precision to inform this issue to the users and implementors. Something like the following (feel free to edit):
===================
The precision specifies the number of digits written after the decimal point. If the numeric value to be written out requires more digits to reperesent it than precision, the written representation is chosen which is closest to the numeric value and representable with the specified precision. If the numeric value falls on the midpoint of two such representations, it is implementation dependent that which representation is chosen.
When the numeric value is inexact floating-point numbers, there are more than one interpretations in this "rounding". One way is to take the effective value the floating-point number represents (e.g. if we use binary floating-point numbers, we take the value of <code>(* <i>sign</i> <i>mantissa</i> (expt 2 <i>exponent</i>))</code>), and compares it to two closest numeric representations of the given precision. Another way is to obtain the default notation of the floating-point number and apply rounding on it. The former (we call it effective rounding) is consistent with most floating-point number operations, but may lead a non-intuitive result than the latter (we call it notational rounding). For example, 5.015 can't be represented exactly in binary floating-point numbers. With IEEE754 floating-point numbers, the floating point number closest to 5.015 is smaller than exact 5.015, i.e. <code>(< 5.015 5015/1000) ⇒ #t</code>. With effective rounding with precision 2, it should result "5.01". However, the users who look at the notation may be confused by "5.015" not being rounded up as they usually expect. With notational rounding the implementation chooses "5.02" (if it also adopts round-half-to-infinity or round-half-up rule). It is up to the implementation to adopt which interpretation.
===================