Ensure Ryu.writeexp doesn't round past starting position #37546
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #37539. The issue here was the
Ryu.writeexp
code got to therounding section and started rounding
0.999
up to precision of 1, butbecause the format string specifies a space before the number, it kept
rounding the space "digit", which messed up the final string. The
solution proposed here keeps track of the original starting
pos
whenwe start
writeexp
and terminates the rounding sequence if we getthere.
I also checked
Ryu.writefixed
, because it has similar rounding code,but it doesn't fail on quite the same case because it explicitly keeps
track of the decimal point and will terminate rounding based on that in
some cases. I did, however, manage to reproduce with
9.999
, becausethe rounding then extends before the decimal point, so a similar fix is
applied to
writefixed
.