问题
#include<stdio.h>
#include<string.h>
int main()
{
char s[100] =\"4.0800\" ;
printf(\"float value : %4.8f\\n\" ,(float) atoll(s));
return 0;
}
I expect the output should be 4.08000000
whereas I got only 4.00000000
.
Is there any way to get the numbers after the dot?
回答1:
Use atof()
or strtof()
* instead:
printf("float value : %4.8f\n" ,atof(s));
printf("float value : %4.8f\n" ,strtof(s, NULL));
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
http://www.cplusplus.com/reference/cstdlib/strtof/
atoll()
is meant for integers.atof()
/strtof()
is for floats.
The reason why you only get 4.00
with atoll()
is because it stops parsing when it finds the first non-digit.
*Note that strtof()
requires C99 or C++11.
回答2:
Unfortunately, there is no way to do this easily. Every solution has its drawbacks.
Use
atof()
orstrtof()
directly: this is what most people will tell you to do and it will work most of the time. However, if the program sets a locale or it uses a library that sets the locale (for instance, a graphics library that displays localised menus) and the user has their locale set to a language where the decimal separator is not.
(such asfr_FR
where the separator is,
) these functions will stop parsing at the.
and you will stil get4.0
.Use
atof()
orstrtof()
but change the locale; it's a matter of callingsetlocale(LC_ALL|~LC_NUMERIC, "");
before any call toatof()
or the likes. The problem withsetlocale
is that it will be global to the process and you might interfer with the rest of the program. Note that you might query the current locale withsetlocale()
and restore it after you're done.Write your own float parsing routine. This might be quite quick if you do not need advanced features such as exponent parsing or hexadecimal floats.
Also, note that the value 4.08
cannot be represented exactly as a float; the actual value you will get is 4.0799999237060546875
.
回答3:
Why one should not use function atof() to convert string to double?
On success, atof() function returns the converted floating point number as a double value. If no valid conversion could be performed, the function returns zero (0.0). If the converted value would be out of the range of representable values by a double, it causes undefined behavior.
Refrence:http://www.cplusplus.com/reference/cstdlib/atof/
Instead use function strtod(), it is more robust.
Try this code:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char s[100] = "4.0800";
printf("Float value : %4.8f\n",strtod(s,NULL));
return 0;
}
You will get the following output:
Float value : 4.08000000
回答4:
Use atof()
But this is deprecated, use this instead:
const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
atof()
returns 0
for both failure and on conversion of 0.0
, best to not use it.
回答5:
By using sscanf we can convert string to float.
#include<stdio.h>
#include<string.h>
int main()
{
char str[100] ="4.0800" ;
const char s[2] = "-";
char *token;
double x;
/* get the first token */
token = strtok(str, s);
sscanf(token,"%f",&x);
printf( " %f",x );
return 0;
}
回答6:
You want to use the atof() function.
http://www.cplusplus.com/reference/clibrary/cstdlib/atof/
回答7:
double x;
char *s;
s = " -2309.12E-15";
x = atof(s); /* x = -2309.12E-15 */
printf("x = %4.4f\n",x);
回答8:
Main() {
float rmvivek,arni,csc;
char *c="1234.00";
csc=atof(c);
csc+=55;
printf("the value is %f",csc);
}
来源:https://stackoverflow.com/questions/7951019/how-to-convert-string-to-float