Lukasz Lenart created WW-5711:
---------------------------------
Summary: StringConverter does not bound fraction digits when
formatting BigDecimal
Key: WW-5711
URL: https://issues.apache.org/jira/browse/WW-5711
Project: Struts 2
Issue Type: Bug
Reporter: Lukasz Lenart
{{StringConverter.convertToString()}} sets
{{format.setMaximumFractionDigits(Integer.MAX_VALUE)}} for {{BigDecimal}},
{{Double}} and {{Float}}.
That constant arrived with WW-4871, which fixed round-trip precision loss when
formatting {{double}} and {{float}}. Both of those types are naturally bounded
— the widest {{double}} needs 325 fraction digits ({{Double.MIN_VALUE}}) and
the widest {{float}} needs 45 — so {{Integer.MAX_VALUE}} is far wider than
WW-4871 actually required.
{{BigDecimal}} carries no such bound. {{DecimalFormat}} honours
{{maximumFractionDigits}} literally and pads the fraction out to the value's
full scale, so the length of the formatted output is driven by the scale of the
value rather than by anything the formatter decides.
Bound {{maximumFractionDigits}} to 340 instead. That preserves WW-4871's intent
exactly — every {{double}} and {{float}} value still formats in full, as does
every {{BigDecimal}} within that range — while making the output length
independent of an arbitrarily large scale.
Add a regression test covering the bound.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)