Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Shannon Barber

Converting a float to a string

This topic is 6195 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Advertisement
There''s no op code. Standard processors don''t even have a native ''string'' type. The most portable way to do it in C/C++ is to use sprintf. In C++, depending on the libraries available to you, you can do fancy casting, or use stringstreams to convert floats into C++ string types...But generally these methods are no faster than sprintf and could be quite a bit slower, depending upon implementation details.

Share this post


Link to post
Share on other sites
Make you''re own function. It can''t be that hard

first you''ll multiply with enough to make it an integer (xxxx.000000)

And then just divide with one big value and (int) that and then and then you''ll just do a little ''if'' of ''switch'' and you''ll get one chat and continue doing that. It''s not that hard.


ie.

you have 23.51

first you *100 = 2351

then you do 2351/1000 and you''ll have 2.351 and you do (int) and you have 2 and then if (value == 2) DaChar[0]=''2'';
and then just do 2351-value*1000=351/100=3.51 and (int) = 3
do a if (or switch would be easier) and you''ll have DaChar[1]=''3''

no probelmo there. Do a while and you''ll get the function short and easy.

Don''t only rely on premade fuction. Allways thing a little, because there is allways someway you could do something in your own way.

/MindWipe




"If it doesn''t fit, force it; if it breaks, it needed replacement anyway."

Share this post


Link to post
Share on other sites
From VC++ Help (hope this comes out ok...)

_ecvt
Converts a double number to a string.

char *_ecvt( double value, int count, int *dec, int *sign );

Function Required Header Compatibility
_ecvt Win 95, Win NT


For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version


Return Value

_ecvt returns a pointer to the string of digits. There is no error return.

Parameters

value

Number to be converted

count

Number of digits stored

dec

Stored decimal-point position

sign

Sign of converted number

Remarks

The _ecvt function converts a floating-point number to a character string. The value parameter is the floating-point number to be converted. This function stores up to count digits of value as a string and appends a null character (''\0''). If the number of digits in value exceeds count, the low-order digit is rounded. If there are fewer than count digits, the string is padded with zeros.

Only digits are stored in the string. The position of the decimal point and the sign of value can be obtained from dec and sign after the call. The dec parameter points to an integer value giving the position of the decimal point with respect to the beginning of the string. A 0 or negative integer value indicates that the decimal point lies to the left of the first digit. The sign parameter points to an integer that indicates the sign of the converted number. If the integer value is 0, the number is positive. Otherwise, the number is negative.

_ecvt and _fcvt use a single statically allocated buffer for the conversion. Each call to one of these routines destroys the result of the previous call.

Example

/* ECVT.C: This program uses _ecvt to convert a
* floating-point number to a character string.
*/

#include
#include

void main( void )
{
int decimal, sign;
char *buffer;
int precision = 10;
double source = 3.1415926535;

buffer = _ecvt( source, precision, &decimal, &sign );
printf( "source: %2.10f buffer: ''%s'' decimal: %d sign: %d\n",
source, buffer, decimal, sign );
}


Output

source: 3.1415926535 buffer: ''3141592654'' decimal: 1 sign: 0


Data Conversion Routines | Floating-Point Support Routines

See Also atof, _fcvt, _gcvt



MatrixCubed
http://MatrixCubed.cjb.net






Share this post


Link to post
Share on other sites
how about this?
find out how many decimal places you need (n), multiply the float by 10^n to get make it into an int.
use itoa.
then create a buffer w/ strlen(string) +1, strcpy the first part, add a ''.'' then strcpy the remaining decimal portion.

Share this post


Link to post
Share on other sites
you cannot just check for a ".", because floating point also could be scientific notation, could contain "e" for exponent. ANSI C function "atof" will do the job.

To the vast majority of mankind, nothing is more agreeable than to escape the need for mental exertion... To most people, nothing is more troublesome than the effort of thinking.

Share this post


Link to post
Share on other sites
you cannot just check for a ".", because floating point also could be scientific notation, could contain "e" for exponent.

To the vast majority of mankind, nothing is more agreeable than to escape the need for mental exertion... To most people, nothing is more troublesome than the effort of thinking.

Share this post


Link to post
Share on other sites
I want to convert a float to an ansi string, without using the C runtime, I started writing my own, but thought I'd check to see if there was one out there...

And the intel processors have instructions to work with null terminated strings, btw.

Edited by - Magmai Kai Holmlor on December 28, 2001 8:27:37 AM

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!