- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 13

Thema: float in String umwandeln

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242

    float in String umwandeln

    Hallo,

    gibt es einen Befehl, der float-Variable in Strings umwandelt?
    Ich dachte das wäre char(), der scheint es aber nicht zu sein.

    vG

    fredyxx

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    ftostr
    dtostr

    printf
    sprintf

    es gibt sicher noch mehr
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    shedepe
    Gast
    Wenn nicht kann man das auch recht schnell selber implementieren oder sich zusammen googlen ( https://www.microchip.com/forums/m183763.aspx)

  4. #4
    HaWe
    Gast
    @shedepe, Ceos
    hier gilt das gleiche wie in einem anderen Thread bezgl. i2c:

    Ihr vergesst leicht, dass Arduino != C/C++ ist.
    Arduino benutzt es zwar , aber es IST es nicht.

    sprintf z.B. funktioniert bei Arduino auf AVR cores z.B. nur für ints, aber ÜBERHAUPT NICHT für floats, es ist in lib.c disabled.
    Nur auf ARM Arduinos funktioniert es.

    Auch vsprintf gibt es für AVR core komplett überhaupt nicht (!),egal für welche Datentypen.
    Bei ARM Arduinos hingegen doch, mit vollem stdio.h Funktionsumfang.

    Aber auch die FILE -bezogen Varianten von stdio.h gibt es auf Arduinos nicht (fprintf, fscanf, fgets), da es für SD irrsinnigerweise bei Arduino kein Filesystem gibt.


    Also: erst den Arduino Playground und Arduino Foren befragen, bevor hier zu vorschnell aus der Hüfte geschossen wird.

    Für ARMs funktioniert also
    Code:
    char * str[20];
    float fvar;
    sprintf( str, "%8.3f", fvar);
    perfekt, aber nicht für AVRs.
    Hier muss man sich behelfen mit etwas wie


    Code:
    char *  ftos(char*str, int len, int prec, double var) {
       int16_t l, p;
       
       dtostrf(var,len,prec,str);
        
       l = strlen(str); 
       p = strchpos(str, '.');  
    
       if (l>len && p<len ) {  
          dtostrf( var,len, max(0,len-p-1), str );  
       } 
       else
       if ((p<=0 || p>=len) && l>len) { 
          p= max(0,len-6); 
          l= strlen( dtostre( var, str, p, 0 ) );
          if(l<len && p==0) {
            strcat(str, " ");  
          }
       }    
       return str;   
    }

    Als Sparvariante funktioniert dabei dtostrf(var,len,prec,str); auch alleine.


    Wenn Ihr also C/++ Lösungsideen postet, seid euch darüber bewusst, dass nicht alles auch auf Arduinos funktioniert, was es gemeinhin für g++ gibt.

    Hinweise wie " kann man das auch recht schnell selber implementieren " sind aber in jedem Falle alles andere als hilfreich und können eigentlich nur als arrogante Ohrfeige für den Fragesteller empfunden werden.
    Geändert von HaWe (08.03.2017 um 14:52 Uhr)

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    und können eigentlich nur als arrogante Ohrfeige für den Fragesteller empfunden werden
    So krass habe ich es nicht empfunden, aber es klappte natürlich nicht.

    Als Sparvariante funktioniert dabei dtostrf(var,len,prec,str); auch alleine.
    Das Fazit was ich nun gezogen habe funktioniert aber auch nicht.

    Code:
          Akku_Spg = analogRead(PIN_Akku_Spg);            // Messwert einlesen
    
          Akku_Spg = Akku_Spg / 1023.0  *  21.51;         //  ergibt sich aus den engesetzten Widerständen
    
          Akku_String  =  dtostrf(Akku_Spg, 5, 2, Akku_String);
    Muss dann doch der Code von HaWe als Funktion vorhandne sein?

    Die Werte, die ich erwarte sind immer positiv, haben nicht mehr als 2 Stellen vor dem Punkt und müssen nicht mehr als 2 Stellen hinter dem Punkt haben.

    vG

    fredyxx

  6. #6
    HaWe
    Gast
    du kannst nicht eine Variable sowohl als Argument in eine Funktion übergeben und sie ihr selber gleichzeitig als return-Wert zuweisen, und wo bitte druckst du sie aus?

    char* zuweisungen gehen sowieso nie mit dem Gleichheitszeichen in C, wenn du den Inhalt eines char *Arrays auf einen anderen Array übertragen willst! Das geht nur mit strcpy() !

    Bitte aber auch grundsätzlich immer den kompletten Code neben den Schnipseln posten!


    Das Ergebnis der Umwandlung steht aber in dem deinem char-string, und du kannst es in 2 Schritten tun oder in 1, wenn du per Serial ausgeben willst:

    die Syntax ist:

    char* Akku_String[20]; // oder was
    dtostrf(Akku_Spg, 5, 2, Akku_String);
    Serial.print(Akku_String);

    oder:

    Serial.print( dtostrf(Akku_Spg, 5, 2, Akku_String) );
    Geändert von HaWe (08.03.2017 um 14:32 Uhr)

Ähnliche Themen

  1. Integer in String umwandeln????
    Von KüSä im Forum PIC Controller
    Antworten: 12
    Letzter Beitrag: 20.12.2008, 20:56
  2. byte umwandeln in string
    Von xcool im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 30.11.2008, 22:09
  3. String zerlegen und umwandeln ?!
    Von Roberto im Forum C - Programmierung (GCC u.a.)
    Antworten: 34
    Letzter Beitrag: 08.08.2007, 10:27
  4. Float, Double to String, Display ATMega16 Belichtungstimer
    Von Timo_P im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 01.04.2007, 18:36
  5. string in zahl umwandeln
    Von pebisoft im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 09.06.2005, 14:20

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress