![]() |
Delphi-Version: 7
0en nach Komma entfernen
Hallo ich habe ein kleines Tool zu Berechnung des Leitungswiderstandes geschrieben, hier kann unter anderem die Anzahl der Nachkommastellen gewählt werden (je nach Abhängigkeit der Länge/Querschnitt/Materialwahl kann dies nötig sein, ist aber von Anwender zu Anwender unterschiedlich).
Nun gibt es aber leider folgendes "Problem" - Wenn die Nachkommastellen gewählt snd, z.B. 5 bekomme ich natürlich immer 5 raus, jedoch ist dies manchmal nicht besonders schön, besser wäre es wenn automatisch die 0en hinter dem Komma entfernt werden würden, eventuell auch das Komma wenn keine Stellen dahinter stehen. Z.B. Nach der Berechnung habe ich einen Wert von 20. Eingestellt sind 5 Nachkommastellen. Ausgabe 20,00000. Schöner wäre 20 Nach der Berechnung habe ich 13,04300, eingestellt wider 5 Nachkommastellen, Ausgabe 13,04300. Schöner wäre 13,043 Vielleicht hat ja jemand ne Idee oder einen Tip. Und hier mal der Quellcode der für die Berechnung nötig ist: PS. Bitte nicht schlagen für unsauberen Quellcode, bin noch am lernen und üben, aber für Tips immer dankbar
Delphi-Quellcode:
laenge:=StrToFloat(LabeledEdit1.Text); //Länge auslesen
quer:=StrToFloat(LabeledEdit2.Text); //Querschnitt auslesen widerstand:=(laenge/(quer*leit)); //Berechnung des Widerstandes nachkomma:=StrToInt(Panel1.Caption); //Nachkommastellen auslesen aus Panel, Einstellung per Scrollbar von 0-18 StaticText3.Caption:=FloatToStrF(widerstand, ffnumber,20,nachkomma) +' Ohm'; //Ausgabe des Widerstandes Schonmal vielen Dank im vorraus. |
AW: 0en nach Komma entfernen
Also für die Darstellung würde ich spontan mal sagen:
Delphi-Quellcode:
while rightstr(widerstand,1) in ['0', ','] do
widerstand := leftstr(widerstand,length(widerstand)-1); |
AW: 0en nach Komma entfernen
Macht das FloatToStr nicht automatisch?
|
AW: 0en nach Komma entfernen
Hallo ich benutze hier ja FloatToStrF damit man die Mindestzahl der Nachkommastellen angeben kann.
Delphi-Quellcode:
Sodale, da sag ich doch mal danke und werd mir das gleich mal versuchen anzugoogeln, hab nämlich im Moment noch keine Ahnung was das bedeutet ;) kommt aber hoffentlich
while rightstr(widerstand,1) in ['0', ','] do
widerstand := leftstr(widerstand,length(widerstand)-1); |
AW: 0en nach Komma entfernen
Auf Deutsch ausführlich:
Delphi-Quellcode:
Und kurz:
// solange das letzte eine Zeichen der String-Variablen "widerstand" sich in der Liste der Werte "0" oder "<komma>" befindet, führe aus
while rightstr(widerstand,1) in ['0', ','] do // weise der String-Variablen "widerstand" den Beginn der String-Variablen "widerstand" zu, mit einer Länge, die um 1 kürzer ist als die aktuelle Länge widerstand := leftstr(widerstand,length(widerstand)-1); Rechts eins abschneiden solange das eine "0" oder ein "," ist. |
AW: 0en nach Komma entfernen
Da sag ich doch nochmals danke, wobei es mir beim Einlesen mehr um das Implementieren ging, die Unit StrUtils habe ich schonmal eingebunden, den Rest muss ich jetzt mal Testen und Einlesen.
Habe die rightStr und leftStr als Variable deklariert auch schon in diversen Arten, aber leider werden die Fehlermeldungen nicht weniger :( aber ich werd noch dahintersteigen. Operator oder Semikolon fehlt Inkompatible Typen Ich glaub ich stell mich heute einfach nur dämlich an..kann aber auch an der Uhrzeit liegen. |
AW: 0en nach Komma entfernen
Evtl. kennt Delphi7 die Funktionen RightStr/LeftStr noch nicht?
Wenn ja und da mathematisch scheinbar nicht lösbar, wegen der Abweichung durch Präzisions-Beschränkung... ...ein anderer Ansatz, der auch wie in Unions Vorschlag auf Manipulation der Ergebnisstrings basiert:
Delphi-Quellcode:
€: DecimalSeparator statt dt. Komma... ist aber wohl in ganz neuen Delphi-Versionen auch schon wieder veraltet?
function FloatToStrEx(Value: Double; MaxDecimal: Byte): String;
var i : Integer; begin if MaxDecimal = 0 then Result := FloatToStr(Trunc(Value)) else begin Result := FloatToStr(Value); i := Pos(DecimalSeparator, Result); if i > 0 then Result := Copy(Result, 1, i + MaxDecimal); end; end; €2: Sonderfall abgefangen |
AW: 0en nach Komma entfernen
Die Funktionen sind in strutils enthalten, dies müsste der uses Klausel hinzugefügt werden.
|
AW: 0en nach Komma entfernen
Besonders 'wissenschaftlich' ist das aber nicht. Die Nachkommastellen sind ja nicht aus kosmetischen Gründen da, sondern drücken die Anzahl der Stellen aus, auf die ein Wert genau ist.
Wenn einer deiner Eingabegrößen nur bis auf 1% genau angegeben werden kann (und auch nicht großartig viel herumgerechnet wird), dann wird die Ausgabegröße auch nur 3 signifikante Stellen haben können. Mehr wären dann unseriös. Insofern hat ein Wert von '20.00000' eine ganz andere Aussage als ein Wert von '20'. Das erste besagt, das die Zwanzig bis auf die 7 signifikante Stelle genau berechnet ist. Der echte Wert schwankt also zwischen 19.9999995 und 20.0000049. Eine hingegen '20' besagt, das Ergebnis zwischen 19.5 und 20.49 liegt. Das ist ein himmelweiter Unterschied |
AW: 0en nach Komma entfernen
@Fredel
Kann dir da leider nicht recht geben, es geht ja darum das man die maximale Anzahl an Nachkommastellen angibt, und wenn man angibt 18 Nachkommastellen, und dann als Ergebnis eine klatte Zahl rauskommt, dann weis ich doch das es sich um eine "wirklich" Glatte Zahl handelt sonst hätte ich ja dementsprechend Nchkommastellen oder nicht ? An der Rechnung ändert sich ja nichts, geht ja nur um eine Schönheitsoperation |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz