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.