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
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.