Subject |
Re: Problem with int() function |
From |
Ken Mayer <dbase@nospam.goldenstag.net> |
Date |
Fri, 17 Mar 2017 09:03:20 -0700 |
Newsgroups |
dbase.getting-started |
On 3/17/2017 7:50 AM, Larry Winkler wrote:
> OK. I'm a pain in the butt. Here is a little test program to prove my point. If the Integer function was working properly, there would be nothing to print.
>
> I finally had to disable all the code I had checking the user's input because of this problem. It seems to me that there is a bug in dBase causing the issue.
>
> Thanks for your patience.
Have you looked in the dUFLP:
BigMath.cc
for example, is designed to deal with really large numbers.
Also, in the dUFLP, in the file MiscCode.prg:
/*
roundPrec()
Author...: Ken Chan, updated by Rich Muller to test for an empty
value ...
Date.....: November 23, 2004
Notes....: This helps deal with the 'rounding error' issues
in dBASE. Note that while this is not *really*
a bug in dBASE, and more of an issue with the
underlying C++ code that dBASE is written in,
it can be annoying, and the round() function
built into dBASE often returns results that are
not truly desirable.
Ken Chan notes: "I seem to recall some cases which still
do not behave as expected. It should be noted that
it (this function) relies on SET PRECISION -- which --
as always, should be as low as possible, but not lower
than nPlace (although given the minimum PRECISION
of 10, that's usually not a problem)."
Usage.....: roundPrec( <nArg>, <nPlace> )
Parameters: nArg = numeric value to round
nPlace = decimal places to round off at
Returns...: numeric -- 0 if empty parameter ...
*/
function roundPrec( nArg, nPlace )
if nPlace <= 0 or nArg == 0
return round( nArg, nPlace )
endif
if empty(nArg)
return 0.00
endif
local nAdj
if (int( nArg * 10^nPlace ) + iif( nArg > 0, 0.5, -0.5 )) ;
/ 10^nPlace == nArg
nReturn = round( nArg + sign( nArg )/10^(nPlace+1), nPlace )
else
nReturn = round( nArg, nPlace )
endif
return nReturn
// end of function: roundPrec()
And in The dBASE Book Plus, Chapter 14, there is a discussion of the new
number Object, as well as SET HIGHPRECISION ... all things you might
want to look at.
Ken
--
*Ken Mayer*
Ken's dBASE Page: http://www.goldenstag.net/dbase
The dUFLP: http://www.goldenstag.net/dbase/index.htm#duflp
dBASE Books: http://www.goldenstag.net/dbase/Books/dBASEBooks.htm
|
|