web-dev-qa-db-fra.com

convertir une chaîne en une double variable en C

J'ai écrit le code suivant .... Il devrait convertir une chaîne telle que "88" en double valeur 88 et l'imprimer

void convertType(char* value)
{
   int i = 0;
   char ch;
   double ret = 0;
   while((ch = value[i] )!= '\0')
   {
      ret = ret*10 +(ch - '0');
      ++i;
   }
   printf("%d",ret);//or %f..what is the control string for double?
}



//input string :88

Mais il affiche toujours 0 ... Mais lorsque je change de type de ret en int ... cela fonctionne bien ... lorsque le type est float ou double, il affiche zéro ...

11

Utilisez sscanf (header stdio.h ou cstdio en C++):

char str[] = "12345.56";
double d;

sscanf(str, "%lf", &d);

printf("%lf", d);
20
Hauleth

Mais il affiche toujours 0 ... Mais quand je change de type de ret en int ... it fonctionne bien ... quand le type est float ou double, il affiche zéro.

La logique est bonne. Juste votre spécificateur de format est faux. Changez-le en %f et tout va bien!

3
Pavan Manjunath

Vous pourrez peut-être utiliser atof (), il retourne un double.

la source

2
jarchuleta

Vous devez utiliser la fonction "atof" si vous souhaitez analyser un caractère * à doubler.

Vous devez également utiliser le délimiteur "% f" pour imprimer le double:

Vous trouverez plus d’informations et des exemples d’utilisation ici.

Exemple d'utilisation:

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

int main()
{
   float val;
   char str[20];

   strcpy(str, "98993489");
   val = atof(str);
   printf("String value = %s, Float value = %f\n", str, val);

   strcpy(str, "tutorialspoint.com");
   val = atof(str);
   printf("String value = %s, Float value = %f\n", str, val);

   return(0);
}

Pour l'imprimer, vous devez l'imprimer en tant que float:

printf("This is the value in float: %f\n", yourFloatValue);
1
Peter Clausen

convertir une chaîne en une double variable en C

Si le dépassement de capacité n'est pas un problème, le code veut détecter un texte supplémentaire sans espace blanc après le texte numérique:

// return 1 on success
int convertType(const char* value, double *destination) {
  char sentinel;
  return sscanf(value,"%f %c", destination, &sentinel) == 1;
}

Si sscanf() ne parvient pas à trouver une double, la valeur de retour de sscanf() sera Soit EOF ou 0.

Si sscanf() trouve un texte autre qu'un espace après le texte numérique, il renverra 2.

Si seule une double est analysée sans extra, sscanf() renvoie 1. Les espaces blanc de début et de fin sont corrects.

Exemple:

double x;
if (convertType(some_string, &x)) {
  printf("%.17e\n", x);  // or whatever FP format you like
} else {
  puts("Failed");
}
0
chux