[
https://issues.apache.org/jira/browse/WICKET-2878?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12870810#action_12870810
]
Juergen Donnerstag commented on WICKET-2878:
--------------------------------------------
I agree. I changed my local version to
@Override
public NumberFormat getNumberFormat(Locale locale)
{
NumberFormat numberFormat = numberFormats.get(locale);
if (numberFormat == null)
{
setNumberFormat(locale, newNumberFormat(locale));
}
return (NumberFormat)numberFormat.clone();
}
public final void setNumberFormat(final Locale locale, final
NumberFormat numberFormat)
{
if (numberFormat instanceof DecimalFormat)
{
((DecimalFormat)numberFormat).setParseBigDecimal(true);
}
numberFormats.put(locale, numberFormat);
}
That way we keep the API (can not change it in 1.4 anyway), but make sure
setParseBigDecimal(true) gets called.
> BigDecimalConverter improvement
> -------------------------------
>
> Key: WICKET-2878
> URL: https://issues.apache.org/jira/browse/WICKET-2878
> Project: Wicket
> Issue Type: Improvement
> Components: wicket
> Affects Versions: 1.4.8
> Reporter: Pedro Santos
>
> I was having problems comparing values returned by the user input into some
> form fields of type BigDecimal. Looking for the problem, I notes that the
> BigDecimalConverter was passing double values as parameter to BigDecimal
> constructor. According with its doc:
> "he results of this constructor can be somewhat unpredictable. One might
> assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is
> exactly equal to 0.1 (an unscaled value of 1, with a scale of 1), but it is
> actually equal to 0.1000000000000000055511151231257827021181583404541015625.
> This is because 0.1 cannot be represented exactly as a double (or, for that
> matter, as a binary fraction of any finite length). Thus, the value that is
> being passed in to the constructor is not exactly equal to 0.1, appearances
> notwithstanding. "
> "The String constructor, on the other hand, is perfectly predictable: writing
> new BigDecimal("0.1") creates a BigDecimal which is exactly equal to 0.1, as
> one would expect. Therefore, it is generally recommended that the String
> constructor be used in preference to this one. "
> Can BigDecimalConverter use the valueOf method of the BigDecimal API or
> String constructor to create those objects from double values? IMO giving
> preference to those options we are improving the converter, since the value
> will to be predictable
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.