incubator-adffaces-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Gonschorek <fe...@gg-media.biz>
Subject Problem converting BigDecimal
Date Tue, 20 Feb 2007 15:54:17 GMT
Hi All,

i am facing (sic!) a problem with faces and decimal numbers. i know this 
is not a trinidad specific problem, but maybe it should be taken into 
consideration:

The trinidad NumberConverter.getAsObject() method converts all Numbers 
to a java.lang.Number Object. (NumberConverter.java, line 226: 
Number num = (Number) fmt.parseObject(value,pp);)

I use this the following facelets code to enter prices for invoices:

<tr:inputText value="${item.price}"
  columns="7" required="true" contentStyle="direction: rtl;">
  <f:convertNumber maxFractionDigits="4" minFractionDigits="2" />
</tr:inputText>

I have read, that the trinidad converter replaces the standard 
convertNumber implementation, so <f:convertNumber should be the trinidad 
implementation...

The value binding ${item.price} is bound to a BigDecimal Object.

If i enter 29,95 (german locale) in the inputText field, the number gets 
converted to: "29.949999999999999289457264239899814128875732421875"

I know, this is a known problem on all computers, since numbers are 
calculated with integer fractions. But since Java has the BigDecimal 
object, isn't it useful to use it in the trinidad NumberConverter 
implementation? Maybe one can detect that the binding leads to a big 
decimal object and use then another method to parse the string?

If you say this is useful, i will try to contribute a patch. Or if 
someone has another solution i would be thankful to hear from it.

Regards
Felix Gonschorek

Mime
View raw message