https://issues.apache.org/jira/browse/OFBIZ-2019



--- On Fri, 10/24/08, Scott Gray <[EMAIL PROTECTED]> wrote:

> From: Scott Gray <[EMAIL PROTECTED]>
> Subject: Re: Entity Field Type Checking and Move BigDecimal versus Double 
> Stuff
> To: dev@ofbiz.apache.org
> Date: Friday, October 24, 2008, 3:03 PM
> Thanks David, that all makes perfect sense.
> 
> Next question :-)
> Some of the minilang operations need to be revised I think,
> for
> example <set> uses string as the default type and
> <calculate> defaults
> to a Double.  I'm wondering if we should make the type
> attribute
> required, I've seen bugs in the past because people
> haven't bothered
> to specify a type and my bet is that people assume in a lot
> of cases
> that the type (for calculate at least) that they are
> passing in will
> be the type to come out.
> 
> The other option for calculate is that we could take
> Groovy's approach
> and choose the best type available for the operation if one
> isn't
> specified:
> http://groovy.codehaus.org/Groovy+Math#GroovyMath-Mathoperations
> 
> WDYT?
> 
> Thanks
> Scott
> 
> 2008/10/24 David E Jones <[EMAIL PROTECTED]>:
> >
> > On Oct 23, 2008, at 3:15 AM, Scott Gray wrote:
> >
> >> Hi David, everyone
> >>
> >> I thought I'd set about changing pretty much
> all the doubles in the
> >> accounting component to BigDecimal and I've
> got a couple of questions:
> >> 1.  Do we need to follow the standard path
> we've taken in the past
> >> where we deprecate any methods taking or returning
> doubles and add Bd
> >> to the end of a new BigDecimal version?  I guess
> we do but it's going
> >> to take a longer so I figure no harm in asking.
> >
> > I'm not sure where these got started, but they
> seem only really useful if
> > you want a BigDecimal version of a function AND a
> Double version of it.
> >
> > I'd say no, there is no reason to continue
> following this pattern. It may
> > break backward compatibility in esoteric areas, but
> really this should be
> > considered a bug and all code affected should be moved
> to use BigDecimal
> > instead of Double anyway.
> >
> >> 2.  Slightly OT but I can't see the point of
> the scaled and rounded
> >> ZEROs in the java files, could someone explain the
> advantage of them
> >> over BigDecimal.ZERO?
> >
> > In older versions of Java there was no
> BigDecimal.ZERO, so this is probably
> > from older code and should updated.
> >
> >> 3.  Could someone give me an example of when to
> use
> >> floating-point/double over fixed-point/BigDecimal?
>  I'm not 100% sure
> >> of that one.
> >
> > Since we're doing business applications most
> things should be fixed point.
> > The problem with floating point is that certain
> decimal numbers are not
> > represented accurately and so if used without rounding
> in a calculation
> > you'll get weird results, usually something like a
> bunch of 9s or 1s at the
> > end of a decimal part of the number. This is because a
> binary number
> > representation for non-integer numbers basically look
> at 1/2 and 1/2 of 1/2
> > and 1/2 of 1/2 of 1/2, and not all fractions split up
> evenly like that, so
> > even with a 64 bit floating point number when
> converted back into a base-10
> > number you get something weird.
> >
> > So when to use a floating point number? When you are
> dealing with extreme
> > numbers where precision beyond a certain number of
> significant digits
> > doesn't matter so much. For financial things ALL
> digits are significant, so
> > a number representation that may cause you to lose
> some is a BAD thing. For
> > scientific stuff sometimes you need numbers that are
> on the order to 10E30
> > or 10E-30 or the like that don't work so well for
> fixed point things, but
> > they only really care about, say, 5 of the 30 or more
> possible significant
> > digits.
> >
> > -David
> >
> >
> >>
> >> 2008/10/22 David E Jones
> <[EMAIL PROTECTED]>:
> >>>
> >>> I've created a branch, now available at:
> >>>
> >>>
> https://svn.apache.org/repos/asf/ofbiz/branches/typecheckcleanup200810
> >>>
> >>> The branch split was revision 706867, so we
> can merge from the trunk at
> >>> that
> >>> rev going forward, and eventually merge back
> into the trunk once we're
> >>> comfortable that enough things have been
> tested by running, perhaps using
> >>> a
> >>> bunch of the automated tests too (not sure how
> well those run in the
> >>> trunk
> >>> right now though, ie I haven't run them in
> quite some time!).
> >>>
> >>> Anyway, the main initial process that I
> targeted was ecommerce browsing,
> >>> add
> >>> to cart, and checkout/order. Still need to
> test basic things like order
> >>> fulfillment, purchasing and receiving, and
> tons of other stuff, but
> >>> hopefully most other things won't be
> impacted as much.
> >>>
> >>> Any and all help is appreciated!
> >>>
> >>> -David
> >>>
> >>> NOTE: I'm still checking out the branch
> and applying my patch with the
> >>> work
> >>> so far, so it'll be a few minutes before
> that's in.
> >>>
> >>> On Oct 21, 2008, at 10:20 PM, Scott Gray
> wrote:
> >>>
> >>>> +1 for making the changes and I'm
> happy to help with the mundane stuff.
> >>>>
> >>>> Regards
> >>>> Scott
> >>>>
> >>>> 2008/10/22 David E Jones
> <[EMAIL PROTECTED]>:
> >>>>>
> >>>>> I added some stuff to make the
> warnings from entity field type checks a
> >>>>> bit
> >>>>> more prominent, and include a stack
> trace to make them easier to track
> >>>>> down.
> >>>>> I tried throwing exceptions instead of
> the warning log messages but
> >>>>> that
> >>>>> pretty much breaks everything,
> especially because we have lots of
> >>>>> BigDecimal/Double problems...
> >>>>>
> >>>>> On the BigDecimal versus Double stuff,
> one of the main type change
> >>>>> problems
> >>>>> comes from this old issue. To help
> resolve this I'd like to change the
> >>>>> java-type of currency-amount and
> currency-precise to BigDecimal instead
> >>>>> of
> >>>>> Double.
> >>>>>
> >>>>> It doesn't make sense to change
> the "floating-point" type's java-type
> >>>>> to
> >>>>> BigDecimal, because it really is a
> floating point like a Double.
> >>>>> However,
> >>>>> we
> >>>>> also have many fields that need
> decimal precision but really should be
> >>>>> fixed
> >>>>> point and not floating point... but
> they really aren't "currency". For
> >>>>> these
> >>>>> I propose to add a
> "fixed-point" field type. This would have a
> >>>>> BigDecimal
> >>>>> java-type and in the database should
> have a type that is also fixed
> >>>>> point
> >>>>> (ie not DOUBLE or FLOAT), unless the
> database has no fixed point types
> >>>>> (which is a big minus for those
> databases). Also, the floating-point
> >>>>> type
> >>>>> should have a Double java-type and a
> floating point SQL type.
> >>>>>
> >>>>> One side effect to changing the
> java-type on these field types is that
> >>>>> it
> >>>>> changes services definitions that are
> based on entity definitions,
> >>>>> which
> >>>>> causes the service engine to throw
> exceptions for type checks... and it
> >>>>> does
> >>>>> throw exceptions instead of just
> printing warning messages, so it does
> >>>>> break
> >>>>> stuff when doing that.
> >>>>>
> >>>>> This is a change that we can't
> switch back and forth on. Either all of
> >>>>> these
> >>>>> services take a Double typed
> parameters, or BigDecimal typed ones...
> >>>>> and
> >>>>> never some of each.
> >>>>>
> >>>>> Because of this I'm actually
> tempted to do a branch and get the changes
> >>>>> going. I'm paying with a few
> common processes with this in place right
> >>>>> now.
> >>>>>
> >>>>> Any thoughts related to this would be
> appreciated.
> >>>>>
> >>>>> Checking types... what a can of worms!
> >>>>>
> >>>>> -David
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >
> >


      

Reply via email to