lukaszlenart opened a new pull request, #1888:
URL: https://github.com/apache/struts/pull/1888

   6.x backport of #1887.
   
   `StringConverter` formatted `BigDecimal`, `Double` and `Float` with 
`maximumFractionDigits` set to `Integer.MAX_VALUE`.
   
   That constant arrived with 
[WW-4871](https://issues.apache.org/jira/browse/WW-4871), which fixed 
round-trip precision loss for `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 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 followed the scale of the value 
rather than its precision.
   
   Bound the setting to 340 instead.
   
   ### Differences from the main-line change
   
   Same change, adjusted for this line: the class sits under 
`com.opensymphony.xwork2.conversion.impl` rather than 
`org.apache.struts2.conversion.impl`, and the surrounding code uses the 
`X.class.isInstance(value)` idiom, which is left as it is. Not a cherry-pick.
   
   ### Backward compatibility
   
   Every `double` and `float` value still formats in full, so WW-4871's 
behaviour is preserved exactly. Every `BigDecimal` with a scale of 340 or less 
is also unchanged. A `BigDecimal` scaled beyond 340 is now rounded to that 
bound rather than padded out in full — the only observable difference.
   
   The existing round-trip assertions are untouched and still pass: 
`testDoubleToStringConversionPL` pins `Double.MIN_VALUE` at 325 fraction 
digits, and `testBigDecimalToStringConversionPL` pins a value slightly wider 
than `double` at 326.
   
   ### Scope
   
   Render side only. `NumberConverter.convertToBigDecimal` is unchanged in this 
PR.
   
   ### Testing
   
   The new test was confirmed failing on `support/struts-6-x-x` before the fix 
was applied, then green after. Full suite: `mvn test -DskipAssembly -pl core` — 
2728 tests, 0 failures.
   
   Fixes [WW-5711](https://issues.apache.org/jira/browse/WW-5711)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to