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 2010/02/23 03:33:27 UTC

[jira] Commented: (TRINIDAD-1683) client-side convertNumber causes loss of precision

    [ https://issues.apache.org/jira/browse/TRINIDAD-1683?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12837043#action_12837043 ] 

Cale Scholl commented on TRINIDAD-1683:
---------------------------------------

Since Java 1.5+ supports covariant return types, the return type of org.apache.myfaces.trinidad.convert.NumberConverter#getAsObject could have been Number instead of Object; this would have prevented the need for casting. However, if at this point we change the signature to return a Number, then any subclasses of NumberConverter that override getAsObject and return an Object would then have a contravariant return type, and thus break. 

We might still consider changing the signature of the private ClientConverter, org.apache.myfaces.trinidadinternal.convert.NumberConverter#getAsObject, to return a Number.

Java doesn't support casting between Number types, so returning a BigInteger instead of a Long could break someone's code (although theoretically we should have only supported casting to Number); it was decided to leave the return type as Long.

> client-side convertNumber causes loss of precision
> --------------------------------------------------
>
>                 Key: TRINIDAD-1683
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-1683
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>          Components: Components
>    Affects Versions:  1.2.12-core
>            Reporter: Cale Scholl
>            Assignee: Gabrielle Crawford
>            Priority: Minor
>         Attachments: maxPrecision_1.2.12.2.patch, maxPrecision_trunk.patch
>
>
> ISSUE:
> ----------
> JS numbers are 64-bit values and thus only have 16 digits of precision; this isn't enough to represent the max value of a Long, BigInteger, or BigDecimal. This means that when we convert a number string to object then back to string on the client, we can lose precision, even though we wouldn't lose any precision on the server.
> FIX:
> -----
> Only render a client converter if the input value is bound to a supported type (Float, Double, Integer, Short, Byte). The JavaScript number is a 64-bit floating type and has enough precision to represent any of these supported types.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.