Home Forums HCL Reviews Tutorials Articles Register Search Today's Posts Mark Forums Read
 LinuxQuestions.org [C++] char * to float
 Programming This forum is for all programming questions. The question does not have to be directly related to Linux and any language is fair game.

Notices

 08-03-2005, 09:59 AM #1 Ossar Member   Registered: Oct 2004 Distribution: Debian, Ubuntu Posts: 38 Rep: [C++] char * to float Code: ```char * c = "-6.02059991328"; float f = atof(c);``` When examining "f" I get: -6.0205998420715 Tha atof function returns a double value and it is probably this that makes the float loose data? How do I convert a char * to a float?
 08-03-2005, 10:42 AM #2 deiussum Member   Registered: Aug 2003 Location: Santa Clara, CA Distribution: Slackware Posts: 895 Rep: Try using a double instead of a float. floats are notorious for losing precision due to the way they are stored. doubles can lose precision as well, but are much more precise than floats. If the double isn't as precise as you need you may need to use some sort of fixed point math library. I think that you'll find that if you try and set f to your value directly, the same thing will happen. Code: ```#include #include int main(int argc, char** argv) { float f = -6.02059991328; std::cout << std::setprecision(14) << f << std::endl; return 0; }``` Result: -6.0205998420715
 08-03-2005, 11:28 AM #3 jim mcnamara Member   Registered: May 2002 Posts: 964 Rep: look in limits.h for FLT_DIG - which is usually 6. This means floats are guaranteed to be accurate in six places only. DBL_DIG is usually 15. If you think that numbers like these should be accurate to umpteen places read what IEEE has to say about floating point numbers: http://cch.loria.fr/documentation/IE...M/goldberg.pdf