You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Cale Scholl (JIRA)" <de...@myfaces.apache.org> on 2009/12/25 07:08:29 UTC

[jira] Created: (TRINIDAD-1666) convertNumber without maxfractiondigits specified limits digits to 3

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.


Re: [jira] Updated: (TRINIDAD-1666) convertNumber without maxfractiondigits specified limits digits to 3

Posted by Cale Scholl <ca...@oracle.com>.
Now that the busy holiday season is over, would someone mind taking a 
look at my patch?

Thanks,
Cale

On 12/24/2009 10:34 PM, Cale Scholl (JIRA) wrote:
>       [ 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)));
>>    }
>>      
>    


[jira] Updated: (TRINIDAD-1666) convertNumber without maxfractiondigits specified limits digits to 3

Posted by "Cale Scholl (JIRA)" <de...@myfaces.apache.org>.
     [ 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.