Nano - Conversion Double en string

Bonjour,

Afin d'améliorer ma calculatrice : https://forum.arduino.cc/t/calculatrice-concatener-les-caracteres/859152, Je cherche à convertir une variable double en string pour l'afficher sur un écran LCD.

Je fais des essais sur un nombre à 6 chiffres après la virgule NB = 254.465785.

J'ai bien essayé de créer une instance String d'une variable double (String MaChaine = String(NB)) mais soit je ne spécifie pas le nombre de chiffre après la virgule et j'obtiens un String arrondie à deux chiffres :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

double NB = 254.465785;


void setup() {
 


lcd.init();
lcd.backlight();

}

void loop() {
 
String MaChaine = String(NB);

 
 lcd.setCursor(0, 0);
 lcd.print(MaChaine);
 
 delay(100000);

}

MaChaine = "254.47"

soit je spécifie le nombre de chiffre après la virgule et j'obtiens (au delà de 4 chiffres après la virgule) une erreur :

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

double NB = 254.465785;


void setup() {
 


lcd.init();
lcd.backlight();

}

void loop() {
 
String MaChaine = String(NB,6);

 
 lcd.setCursor(0, 0);
 lcd.print(MaChaine);
 
 delay(100000);

}

MaChaine = "254.465790"

Je voudrai pouvoir récupérer la valeur exacte d'un nombre float ou double à 6 chiffres aprés la virgule ou plus et le transformer en string à l'identique.

Ma méthode n'est pas la bonne, j'en ai essayé d'autres mais j'avoue ne pas avoir trouvé ou compris.

Merci.

PS : j'ai cherché pendant longtemps avant de venir vous embêter de nouveau.
C'est peut-être du au fait que la nano gère mal les calculs en virgule flottante, du moins pour ma méthode.

C'est une limitation de la plateforme. C'est une conséquence du mode de codage des nombres flottants sur peu d'octets. Sur les ATmega les float et les double sont codés sur 4 octets. Utiliser les double n'apporte rien par rapport aux float.
Si tu veux plus de précision il faut passer sur un processeur plus performants. Comme te l'a expliqué J-M-L ici

Merci fdufnews,

En fait je souhaitai supprimer le dernier chiffre tapé sur la calculatrice.
Je vais voir si il y a moyen de coder différemment pour y arriver.
Je doute qu'il y est une solution.

Merci bon dimanche.

Lors de la saisie, tu construis directement le nombre. Tu pourrais, en parallèle, construire la chaîne dans une autre variable pour pouvoir l'éditer.
Ou tout simplement travailler sur la chaîne tant que l'utilisateur n'a pas saisie le symbole d'une opération.

J'essaye justement de trouver une solution en prenant char par char pour faire une variable string et ensuite utiliser la méthode substring.
Je ne connais pas bien les variables char, je ne sais pas si je peux travailler directement avec sans passer par les strings et toutes leurs méthodes faciles à utiliser.

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

//double NB = 254.0;

char    key1 = '2';
char    key2 = '5';
char    key3 = '4';
char    key4 = '.';
char    key5 = '1';
char    key6 = '5';
char    key7 = '6';
int longueur;
//char MaChaine;

void setup() {

lcd.init();
lcd.backlight();

}

void loop() {
 

 //MaChaine = key1 & key2 & key3;
 
 String MaChaine = String(key1)+ String(key2)+  String(key3) +  String(key4) +  String(key5) +   String(key6)+  String(key7) ;
 longueur = MaChaine.length();
 MaChaine = MaChaine.substring(0,longueur-1);
 lcd.setCursor(0, 0);
 lcd.print(MaChaine);
 
 delay(100000);

}

Voilà à chaque fois que je tape sur une touche de 0 à 9 et le point je peux créer parallèlement une variable du style : MaChaine += String(key) et je continue à faire mes calculs avec la variable double nbActuel .

Il faudra que je teste ça.
Je suis peut-être sur la bonne voie ou peut-être qu'il y a mieux à faire d'autant plus que je ne vois pas comment m'en sortir en dissociant ce qui est affiché de ce qui est à calculer !

Je pense avoir tout essayé.
La nano finit toujours à un moment ou à un autre par convertir en float ou double soit parce que je le lui fait faire, soit parce qu'elle le fait d'elle-même.
Le résultat est soit faux soit inexploitable dans le contexte que je souhaite.
Je passe à autre chose.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.