You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Johan Compagner (JIRA)" <ji...@apache.org> on 2008/10/21 13:40:44 UTC
[jira] Commented: (WICKET-1882) The BigDecimalConverter is using
the double constructor of BigDecimal instead of the String constructor
[ https://issues.apache.org/jira/browse/WICKET-1882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12641356#action_12641356 ]
Johan Compagner commented on WICKET-1882:
-----------------------------------------
and i just see that we already do that for you in 1.4:
public NumberFormat getNumberFormat(Locale locale)
{
NumberFormat numberFormat = numberFormats.get(locale);
if (numberFormat == null)
{
numberFormat = NumberFormat.getInstance(locale);
if (numberFormat instanceof DecimalFormat)
((DecimalFormat)numberFormat).setParseBigDecimal(true);
> The BigDecimalConverter is using the double constructor of BigDecimal instead of the String constructor
> -------------------------------------------------------------------------------------------------------
>
> Key: WICKET-1882
> URL: https://issues.apache.org/jira/browse/WICKET-1882
> Project: Wicket
> Issue Type: Wish
> Components: wicket
> Affects Versions: 1.3.4
> Reporter: Koen Molkenboer
> Assignee: Johan Compagner
> Priority: Trivial
>
> The BigDecimalConverter is using the constructor BigDecimal(double val), but the results of this constructor can be somewhat unpredictable according to the Java doc:
> Translates a double into a BigDecimal. The scale of the BigDecimal is the smallest value such that (10scale * val) is an integer.
> Note: the results of this constructor can be somewhat unpredictable. One might assume that new BigDecimal(.1) is exactly equal to .1, but it is actually equal to .1000000000000000055511151231257827021181583404541015625. This is so because .1 cannot be represented exactly as a double (or, for that matter, as a binary fraction of any finite length). Thus, the long value that is being passed in to the constructor is not exactly equal to .1, appearances notwithstanding.
> The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal(".1") is exactly equal to .1, as one would expect. Therefore, it is generally recommended that the (String) constructor be used in preference to this one.
> Could you change the BigDecimalConverter so it will use the String constructor when creating a new BigDecimal?
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.