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 floatString 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.