Umwandlung in String mit Nachkommastellen (war :ständig Probleme mit Umwandlung signed und unsigned Werten)



  • save->Add(IntToStr(i) + " \t " + (IntToStr(E_Intervall)/1000) /
             IntToStr(E_Messreihe) + " \t " + IntToStr(v1[i]));
    

    noch schöner wäre es wenn die zweite Spalte (also das Ergebnis von ((E_intervall / 1000) / E_Messreihe)) als double angezeigt wird. (Anmerkung: Save ist ein TStringList-Objekt)

    Mit den Casts hab ich immer so meine Probleme



  • Hallo

    Es sollte dir doch selber auffallen, das du E_intervall in einen String umwandelst und erst danach durch 1000 teilst. Mit Strings kann man aber keine Rechenoperationen durchführen, egal was drin steht. Du must zuerst rechnen und dann in einen String umwandeln.
    Und damit du Nachkommastellen siehst, solltest du bei der Rechnung float erzwingen, indem du .0 an die 1000 anhängst :

    String ergebnis = FloatToStr((E_intervall / 1000.0) / E_Messreihe);
    

    Mit casts oder unsigned hat das aber nichts zu tun.

    bis bald
    akari



  • akari schrieb:

    Und damit du Nachkommastellen siehst, solltest du bei der Rechnung float erzwingen, indem du .0 an die 1000 anhängst

    Oder genauer .0f ... 🕶



  • Hallo

    Naja, das .0 reicht um Fließkommazahlen zu erzwingen. Mit dem f oder d kann man noch bestimmen ob float oder double. Zufrieden? 😉

    bis bald
    akari



  • bei den E_Intervall handelt es sich um Editfelder, hatte die Eigenschaft text vergessen. Die Fehlermeldung mit unsigned kam weil die size-Methode von dem vector v1 unsigned int zurückgibt.
    Trotzdem gibts noch Fehler:

    float x = FloatToStr(E_Intervall->Text/1000.0)/E_Messreihe->Text);
    for (unsigned int i=0; i<=v1.size(); i++) {
          save->Add(IntToStr(i) + " \t " + x + " \t " + IntToStr(v1[i]));
          }
    

    [C++ Fehler] Unit1.cpp(74): E2015 Mehrdeutigkeit zwischen '_fastcall Variant::operator float() const' und '_fastcall Variant::operator double() const'

    [C++ Fehler] Unit1.cpp(74): E2342 Keine Übereinstimmung des Typs beim Parameter 'Value' ('long double' erwartet, 'Variant' erhalten)

    [C++ Fehler] Unit1.cpp(74): E2141 Fehler in der Deklarationssyntax



  • Hallo

    bei den E_Intervall handelt es sich um Editfelder, hatte die Eigenschaft text vergessen

    Dann must du den String aus der Text-Eigenschaft auch erstmal in eine Zahl umwandeln, bevor du damit rechnen kannst.
    Und das Ergebnis von FloatToStr ist ein String, kein float

    String x = FloatToStr(StrToInt(E_Intervall->Text)/1000.0)/StrToInt(E_Messreihe->Text));
    for (unsigned int i=0; i<=v1.size(); i++) {
          save->Add(IntToStr(i) + " \t " + x + " \t " + IntToStr(v1[i]));
          }
    

    bis bald
    akari



  • Wenn du eine Funktion benutzt, die du noch nicht kennst, kannst du in der Doku eigentlich immer schön sehen, welche Parameter sie entgegennimmt und welchen Typ sie zurückgibt...



  • Bin inzwischen grosser Fan von FloatToStrF geworden, damit lassen sich auch Tausendertrennzeichen einfügen, was die Zahl leserlicher macht.


Anmelden zum Antworten