Go Down

Topic: [Résolu]Conversion float en char (Read 12910 times) previous topic - next topic

fsxonarduino

En plus clean et plus court

Code: [Select]
#include <PString.h>

float x=125.55;
char buffer[20];

void setup(){
Serial.begin(9600);
}

void loop(){
PString mystring(buffer, sizeof(buffer));
mystring.print(x);

for (int i=0;i<=5;i++){
Serial.print(buffer[i]);
}

Serial.println ();
delay(500);
}

john_lenfr

Il y a aussi

Code: [Select]
dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);

B@tto


Il y a aussi

Code: [Select]
dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);


+1

PString.h en plus n'est pas très utile depuis la 1.0 et la classe String (à éviter par ailleurs)
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

fsxonarduino

dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf);

Je vais essayer
Merci

fsxonarduino


john_lenfr

Oui mais pas conseillé.
Et ça t'évite de charger toute une librairie juste pour utiliser une fonction, librairie qui est obsolète apparemment.

;)

fdufnews

#21
Jan 09, 2014, 12:44 pm Last Edit: Jan 09, 2014, 12:46 pm by fdufnews Reason: 1
La librairie Pstring n'est pas obsolète. Elle est compatible 1.0. Elle est beaucoup moins volumineuse que String.
Contrairement à String elle ne fait pas d'allocation de mémoire. C'est la fonction appelante qui alloue les buffers et donc si en amont la gestion de mémoire est bien faite, il n'y a pas de risque de fractionnement de la mémoire.

Pstring est d'un usage plus général que dtostrf donc après il faut voir en fonction du besoin global du programme.

dtostrf fait partie de la librairie mathématique donc éventuellement cela ajoute aussi une librairie.

fsxonarduino

ça devient une guerre mon histoire !!

fdufnews

Non, non.
On échange des informations. C'est factuel.
Il y a souvent plusieurs manières de faire une chose. Après en fonction de la situation, une solution est meilleur que l'autre mais là c'est à toi de voir en fonction de ton besoin dans son ensemble.

XavierMiller

Mais pourquoi sprintf, natif, ne fonctionnerait pas ?

fdufnews


Mais pourquoi sprintf, natif, ne fonctionnerait pas ?

Il me semble me souvenir qu'il y a un problème avec sprintf et les float. Je crois qu'il n'est pas implémenté pour ce type si ma mémoire est bonne.

skywodd



Mais pourquoi sprintf, natif, ne fonctionnerait pas ?

Il me semble me souvenir qu'il y a un problème avec sprintf et les float. Je crois qu'il n'est pas implémenté pour ce type si ma mémoire est bonne.

Version courte d'une longue histoire : parce que les nombres flottants demandent trop de ressources.

Version longue pour les curieux :
Les nombres flottants avec AVR-GCC sont émulés par une bibliothèque logicielle nommée "libm" qui implémente la norme IEEE 754. Cette norme permet de représenter numériquement des nombres réels qu'on appellent couramment sous le nom de "nombre à virgule flottante" (http://fr.wikipedia.org/wiki/Virgule_flottante#Norme_IEEE_754).

Pourquoi ce casser la tête à faire tout les calculs de flottant avec du code (bien compliqué en plus) ?
Tout simplement parce que les processeurs AVR8 n'ont pas de co-processeur pour les nombres à virgule flottante (FPU), contrairement aux processeurs ARM par exemple (et encore pas tous ! Les FPU dans les microcontrôleurs, même 32 bits, c'est encore assez rare).

Du coup comme le hardware ne peut pas le faire on est obligé de le faire en software. Mais du coup c'est beaucoup, mais alors vraiment beaucoup plus lourd (et donc plus lent).
Intégrer de base le support des nombres flottants dans <stdio.h> reviendrait à faire perdre plus de 4Ko de mémoire programme juste pour ça. Et niveau mémoire RAM e serait là aussi un vrai massacre.

Note : Les nouvelles versions d'AVR-GCC supportent les calculs à virgule fixe (http://gcc.gnu.org/wiki/avr-gcc).
Ça permet de faire comme avec les nombres flottants classique mais en plus léger, par contre c'est expérimental et uniquement dans les versions 4.8.x.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up