[
https://issues.apache.org/jira/browse/TRINIDAD-1666?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Cale Scholl updated TRINIDAD-1666:
----------------------------------
Status: Patch Available (was: Open)
> convertNumber without maxfractiondigits specified limits digits to 3
> --------------------------------------------------------------------
>
> Key: TRINIDAD-1666
> URL: https://issues.apache.org/jira/browse/TRINIDAD-1666
> Project: MyFaces Trinidad
> Issue Type: Bug
> Components: Components
> Affects Versions: 1.2.12-core
> Reporter: Cale Scholl
> Priority: Minor
> Attachments: fractionDigits_1.2.12.2.patch, fractionDigits_trunk.patch
>
>
> ISSUE:
> ----------
> Given a default convertNumber e.g. <af:convertNumber id="cn1" type="number"/>:
> Enter 1.23456789. Press Submit. You will see that the number is rounded to
> 1.235, only 3 fractional digits.
> FIX:
> -----
> 1. Server-side converter: If maximumFractionDigits isn't explicitly
> specified, then set it to the highest possible value, so that no fraction
> digits are truncated.
> trinidad-api\src\main\java\org\apache\myfaces\trinidad\convert\NumberConverter
> _setFormatProperties:
> if (isMaximumFractionDigitsSet())
> {
> formatter.setMaximumFractionDigits(getMaxFractionDigits());
> }
> else
> {
> // Override the default java behavior. The default number formatter
> // created via NumberFormat.getNumberInstance(locale) has a
> // maxFractionDigits of 3. I don't see why this behavior would be
> // desired; the fraction digits shouldn't be truncated unless that
> // behavior is explicitly requested.
> // According to the javadoc for
> // java.text.DecimalFormat.setMaximumFractionDigits,
> // the fraction digit count is limited to 340.
> formatter.setMaximumFractionDigits(340);
> }
> 2. Client-side converter: Don't set a default value for maxFractionDigits.
> trinidad-impl\src\main\javascript\META-INF\adf\jsLibs\NumberFormat.js
> function TrNumberFormat:
> // The default behavior of convertNumber with respect to number of
> // fractional digits should be the same as the implicit conversion to a
> // number. That is also the behavior that is documented in the javadoc for
> // javax.faces.convert.NumberConverter
> //this._maxFractionDigits = 3;
> 3. Client-side converter: maxFractionDigits should only be applied during
> formatting (getAsString), not during parsing (getAsObject).
> trinidad-impl\src\main\javascript\META-INF\adf\jsLibs\NumberConverter.js
> TrNumberConverter.prototype.getAsObject:
> // We shouldn't be losing presicion here when converting to object;
> // _maxFractionDigits should only be applied during formatting when we
> // convert the number to a string.
> //parsedValue =
> parseFloat(parsedValue.toFixed(this._numberFormat.getMaximumFractionDigits()));
> 4. Client-side converter: If maxFractionDigits is undefined, then don't
> truncate any fraction digits.
> TrNumberConverter.prototype.getAsString:
> else
> {
> // _maxFractionDigits should only be applied if explicitly specified.
> var maxFractionDigits = this._numberFormat.getMaximumFractionDigits();
> return (maxFractionDigits === undefined) ?
> this._numberFormat.format(parseFloat(number))
> :
>
> this._numberFormat.format(parseFloat(number.toFixed(maxFractionDigits)));
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.