Подтвердить что ты не робот

Как преобразовать строку в float?

#include<stdio.h>
#include<string.h>

int main() 
{
    char s[100] ="4.0800" ; 

    printf("float value : %4.8f\n" ,(float) atoll(s)); 
    return 0; 
}

Я ожидаю, что результат должен быть: 4.08000000 где, как я получил только 4.00000000

Есть ли способ получить числа после точки

4b9b3361

Ответ 1

Используйте atof() или strtof() *:

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() предназначен для целых чисел.
  • atof()/strtof() предназначен для поплавков.

Причина, по которой вы получаете 4.00 только с atoll(), заключается в том, что она перестает разбираться, когда находит первую не цифру.

* Обратите внимание, что для strtof() требуется C99 или С++ 11.

Ответ 2

К сожалению, нет никакого способа сделать это легко. У каждого решения есть свои недостатки.

  • Используйте atof() или strtof() напрямую: это то, что большинство людей скажет вам, и это будет работать большую часть времени. Однако, если программа устанавливает локаль или использует библиотеку, которая устанавливает локаль (например, графическую библиотеку, которая отображает локализованные меню), и пользователь имеет свой языковой стандарт, установленный на языке, где разделитель десятичных знаков не является . (такой как fr_FR, где разделитель ,), эти функции перестанут анализировать в ., и вы получите get 4.0.

  • Используйте atof() или strtof(), но измените локаль; это вопрос вызова setlocale(LC_ALL|~LC_NUMERIC, ""); перед любым вызовом atof() или подобным. Проблема с setlocale заключается в том, что она будет глобальной для процесса, и вы можете вмешаться в остальную часть программы. Обратите внимание, что вы можете запросить текущий язык с помощью setlocale() и восстановить его после завершения.

  • Напишите свою собственную процедуру разбора поплавка. Это может быть довольно быстро, если вам не нужны расширенные функции, такие как синтаксический анализ экспоненты или шестнадцатеричные поплавки.

Также обратите внимание, что значение 4.08 не может быть представлено точно как float; фактическое значение, которое вы получите, это 4.0799999237060546875.

Ответ 3

Почему нельзя использовать функцию atof() для преобразования строки в double?

При успешном завершении функция atof() возвращает преобразованное число с плавающей запятой как двойное значение. Если действительное преобразование не было выполнено, функция возвращает ноль (0.0). Если преобразованное значение будет вне диапазона значений, представляемых двойным, это приведет к undefined поведению.

Отказ: http://www.cplusplus.com/reference/cstdlib/atof/

Вместо этого используйте функцию strtod(), она более надежная.

Попробуйте этот код:

#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;
}

Вы получите следующий результат:

Float value : 4.08000000

Ответ 4

Используйте atof()

Но это устарело, используйте вместо этого:

const char* flt = "4.0800";
float f;
sscanf(flt, "%f", &f);

http://www.cplusplus.com/reference/clibrary/cstdlib/atof/

atof() возвращает 0 как для отказа, так и для преобразования 0.0, лучше всего не использовать его.

Ответ 6

double x;

char *s;

s = " -2309.12E-15";

x = atof(s);     /* x = -2309.12E-15 */

printf("x = %4.4f\n",x);

Ответ 7

Main()  {
    float rmvivek,arni,csc;
    char *c="1234.00";
    csc=atof(c);
    csc+=55;
    printf("the value is %f",csc);
}

Ответ 8

С помощью sscanf мы можем преобразовать строку в 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; 
}