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.

Reply via email to