Connecting Tech Pros Worldwide Forums | Help | Site Map

Printf Question

Mandragon03@gmail.com
Guest
 
Posts: n/a
#1: Apr 16 '07
I am looking for a way to take a floating point number and get rid of
any extraneous 0's at the end. For instance if I have

myFloat = 9999;

printf("%f", myFloat);

I get 9999.0000. I want to get rid of these 0's.

Here is one catch. I also need to be able to do this:

myFloat = .531;

printf("%f", myFloat);

I get .5310000

I need to get .531.

I realize I can do this

printf("%2f", myFloat);

which will limit the mantissa to two places, but this will not work
for what i am doing because I can not lose that much precision on
floats like .05369.

Thank you for you time,

Mandragon03


Victor Bazarov
Guest
 
Posts: n/a
#2: Apr 17 '07

re: Printf Question


Mandragon03@gmail.com wrote:
Quote:
I am looking for a way to take a floating point number and get rid of
any extraneous 0's at the end. For instance if I have
>
myFloat = 9999;
>
printf("%f", myFloat);
>
I get 9999.0000. I want to get rid of these 0's.
>
Here is one catch. I also need to be able to do this:
>
myFloat = .531;
>
printf("%f", myFloat);
>
I get .5310000
>
I need to get .531.
>
I realize I can do this
>
printf("%2f", myFloat);
>
which will limit the mantissa to two places, but this will not work
for what i am doing because I can not lose that much precision on
floats like .05369.
The problem actually is rather simple. The default is 7 decimal
digits in the result, which means that 0.5310000 and 0.530999951
will give you the same output. The zeros are there to indicate to
what digit the output was _rounded_ to.

If you really need to lose the trailing zeros, you will have to
trim them yourself. Convert your number to a string and drop all
chars from it until the first non-zero:

std::ostringstream s;
s << myFloat;
std::string str = s.str();
while (str.size() 1 && *str.rbegin() == '0')
str.erase(str.size() - 1);

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


Jack Klein
Guest
 
Posts: n/a
#3: Apr 17 '07

re: Printf Question


On Mon, 16 Apr 2007 20:40:32 -0400, "Victor Bazarov"
<v.Abazarov@comAcast.netwrote in comp.lang.c++:
Quote:
Mandragon03@gmail.com wrote:
Quote:
I am looking for a way to take a floating point number and get rid of
any extraneous 0's at the end. For instance if I have

myFloat = 9999;

printf("%f", myFloat);

I get 9999.0000. I want to get rid of these 0's.

Here is one catch. I also need to be able to do this:

myFloat = .531;

printf("%f", myFloat);

I get .5310000

I need to get .531.

I realize I can do this

printf("%2f", myFloat);

which will limit the mantissa to two places, but this will not work
for what i am doing because I can not lose that much precision on
floats like .05369.
>
The problem actually is rather simple. The default is 7 decimal
Correction, 6 decimal places.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://c-faq.com/
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++
http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html
Mandragon03@gmail.com
Guest
 
Posts: n/a
#4: Apr 17 '07

re: Printf Question


On Apr 16, 6:40 pm, "Victor Bazarov" <v.Abaza...@comAcast.netwrote:
Quote:
Mandrago...@gmail.com wrote:
Quote:
I am looking for a way to take a floating point number and get rid of
any extraneous 0's at the end. For instance if I have
>
Quote:
myFloat = 9999;
>
Quote:
printf("%f", myFloat);
>
Quote:
I get 9999.0000. I want to get rid of these 0's.
>
Quote:
Here is one catch. I also need to be able to do this:
>
Quote:
myFloat = .531;
>
Quote:
printf("%f", myFloat);
>
Quote:
I get .5310000
>
Quote:
I need to get .531.
>
Quote:
I realize I can do this
>
Quote:
printf("%2f", myFloat);
>
Quote:
which will limit the mantissa to two places, but this will not work
for what i am doing because I can not lose that much precision on
floats like .05369.
>
The problem actually is rather simple. The default is 7 decimal
digits in the result, which means that 0.5310000 and 0.530999951
will give you the same output. The zeros are there to indicate to
what digit the output was _rounded_ to.
>
If you really need to lose the trailing zeros, you will have to
trim them yourself. Convert your number to a string and drop all
chars from it until the first non-zero:
>
std::ostringstream s;
s << myFloat;
std::string str = s.str();
while (str.size() 1 && *str.rbegin() == '0')
str.erase(str.size() - 1);
>
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
I figured as much. Thank you for taking the time to answer my
question. You guys are great =)

Juha Nieminen
Guest
 
Posts: n/a
#5: Apr 18 '07

re: Printf Question


Mandragon03@gmail.com wrote:
Quote:
I am looking for a way to take a floating point number and get rid of
any extraneous 0's at the end. For instance if I have
>
myFloat = 9999;
>
printf("%f", myFloat);
>
I get 9999.0000. I want to get rid of these 0's.
Have you tried "%g" instead of "%f"?
Closed Thread


Similar C / C++ bytes