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.