Lukasz Lenart created WW-5828:
---------------------------------
Summary: StringConverter does not bound integer digits when
formatting BigDecimal
Key: WW-5828
URL: https://issues.apache.org/jira/browse/WW-5828
Project: Struts 2
Issue Type: Bug
Components: Core
Reporter: Lukasz Lenart
Fix For: 7.5.0, 6.13.0
WW-5711 bounded {{maximumFractionDigits}} to 340 in
{{StringConverter.convertToString()}}, so the length of a formatted
{{BigDecimal}} no longer follows a large positive scale. The integer side has
no equivalent bound: {{DecimalFormat}} keeps its default
{{maximumIntegerDigits}} of {{Integer.MAX_VALUE}}, and for a {{BigDecimal}}
with a large negative scale it pads the integer part out to the full value, so
the length of the output follows the scale of the value rather than its
precision — the counterpart of WW-5711 on the other side of the decimal point.
{{setMaximumIntegerDigits}} is not the right bound. {{DecimalFormat}} applies
it by dropping the leading digits rather than by rounding, so an ordinary value
wider than the bound would format as its trailing digits only.
Bound the number of integer digits ({{precision() - scale()}}) to the same 340
instead. A {{BigDecimal}} within that bound formats exactly as before; past it,
fall back to {{BigDecimal.toString()}}, which renders the value compactly in
scientific notation. Every {{double}} still formats in full — the widest,
{{Double.MAX_VALUE}}, has 309 integer digits, and the existing tests pin that.
Add a regression test covering the bound on both sides of it.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)