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 ...
Utilisez sscanf
(header stdio.h
ou cstdio
en C++):
char str[] = "12345.56";
double d;
sscanf(str, "%lf", &d);
printf("%lf", d);
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!
Vous pourrez peut-être utiliser atof (), il retourne un double.
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);
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");
}