The problem with floating numbers is that there really is no concept of how
many digits are after the decimal point.  The calling routine could pas
1.23, 1.230, 1.2300, etc., and your code would always see the same value.
And because of the floats are stored internally, it is really not possible
for the calling routine to round a number to any number of decimal places
and have it come over to you with the same number of decimal places.

I think you're right. You need to base the format of the string either on
the display requirements or on something they pass you.  It is nearly
impossible to base it on the number itself.

Mike


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of David
Leland
Sent: Thursday, March 01, 2001 11:21 AM
To: Palm Developer Forum
Subject: Re: Determining number of decimal positions


But that's what my problem is.  I don't know how many places after the
decimal.

The more I think about this, the more I realize that the only way for my
function to work is to know how many decimal places to the right I am
expected to format.  This will have to be passed to my function from the
calling one.

Thanks for your insight,
Dave

Mike Walters <[EMAIL PROTECTED]> wrote in message news:41288@palm-dev-forum...
>
> If "%f" with no modifiers is passed to a standard sprintf function, it
> places 6 digits after the decimal point.  So the values that sprintf
> produced for me were (using Unix):
>
> 12.345000

> 123.400002
> 1234.560059
> 1234.500000
> 12345.000000
>
> Some rounding errors were also introduced.
>
> I had a case about a month ago where I needed to print numbers in floating
> point format, and did not want the scientific format that FlptFToA
produced.
> Maybe there is a better solution, but since I knew I wanted four digits
> after the decimal, I did the following:
> - multiply the float by 10,000  (moves decimal place 4 places to right)
> - typecast the value to a long int
> - for each digit of the resulting integer
>     - pick off last digit using a mod 10 (num %% 10)
>     - add to string
>     - after four digits added to string, insert a decimal point into
string
>     - divide number by 10
> - reverse the string
>
> I know it is kind of brute force, but it works.
>
> Mike
>
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of David
> Leland
> Sent: Thursday, March 01, 2001 10:00 AM
> To: Palm Developer Forum
> Subject: Re: Determining number of decimal positions
>
>
> I was afraid that might be the case.  So let me ask hypothetically, if the
> Palm OS supported the "%f" formatting modifier on the StrPrintF function
> (e.g.  returnedString = StrPrintF("%f", floatValue);), what value would be
> placed into returnedString if the float values were:
> 12.3450
> 123.400
> 1234.56
> 1234.50
> 12345.00
>
> Dave
>
> Mike Walters <[EMAIL PROTECTED]> wrote in message
news:41279@palm-dev-forum...
> >
> > By "number of decimal places" do you mean the number before the decimal,
> the
> > number after, or both?
> >
> > 1) For the number before the decimal place: I don't know of a built-in
> > function, but you could use a small piece of code like the following to
> > count the number of places:
> >
> >   int CountDigits (float your_val)
> >     {
> >     int   count;
> >
> >     count = 0;
> >     while (your_val > 1.0)
> >       {
> >       count ++;
> >       your_val /= 10.0;
> >       }
> >     return count;
> >     }
> >
> > 2) For the number of digits after the decimal, the answer really can't
be
> > determined (do you count all of the trailing zeros, worry arount
floating
> > point rounding, etc).  So the easiest thing to do is just select a value
> to
> > use in displaying your number, then truncate off any trailing zeros that
> you
> > don't want.
> >
> > 3) For the total number of digits, you could probably use a combination
of
> > the two methods above.
> >
> > Of course, for any kind of problem, you are going to find almost as many
> > solutions as you have responses.  An without having the M&R book in
front
> of
> > me, I'm not sure the value that it is expecting to be passed.
> >
> > Hope this helps,
> >
> > Mike Walters
> > Rose Software
> >
> >
> >
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED]]On Behalf Of David
> > Leland
> > Sent: Thursday, March 01, 2001 9:28 AM
> > To: Palm Developer Forum
> > Subject: Determining number of decimal positions
> >
> >
> > I have a function that is being passed a float value.  In my function, I
> > will be formatting that float value to a string (e.g.  1234.56 to
> 1,234.56)
> > and returning it.  My problem is that I do not know the number of
decimal
> > places being passed.  The float value could be 123.456 or it could be
> > 1234.56 or 12.3456.  Is there a way I can determine how many decimal
> > positions that float value has?
> >
> > "Advanced Palm Programming" by Mann & Rischpater has an excellent
routine
> > for formatting a float value to a string but unfortunately, it expects
the
> > calling function to tell it how many decimal places to format.  My App
is
> a
> > Plug-in to another Palm App so I don't have the luxury of knowing
upfront
> > how many decimal places the float value has.
> >
> > Thanks,
> > Dave
> >
> >
> >
> > --
> > For information on using the Palm Developer Forums, or to unsubscribe,
> > please see http://www.palmos.com/dev/tech/support/forums/
> >
> >
> >
>
>
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe,
> please see http://www.palmos.com/dev/tech/support/forums/
>
>
>



--
For information on using the Palm Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/tech/support/forums/


-- 
For information on using the Palm Developer Forums, or to unsubscribe, please see 
http://www.palmos.com/dev/tech/support/forums/

Reply via email to