Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 0en nach Komma entfernen (https://www.delphipraxis.net/163696-0en-nach-komma-entfernen.html)

Vukloc 11. Okt 2011 20:56

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.

Union 11. Okt 2011 21:07

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);

Bjoerk 11. Okt 2011 21:44

AW: 0en nach Komma entfernen
 
Macht das FloatToStr nicht automatisch?

Vukloc 11. Okt 2011 21:52

AW: 0en nach Komma entfernen
 
Hallo ich benutze hier ja FloatToStrF damit man die Mindestzahl der Nachkommastellen angeben kann.

Delphi-Quellcode:
while rightstr(widerstand,1) in ['0', ','] do
   widerstand := leftstr(widerstand,length(widerstand)-1);
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

Union 11. Okt 2011 21:58

AW: 0en nach Komma entfernen
 
Auf Deutsch ausführlich:
Delphi-Quellcode:
// 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);
Und kurz:
Rechts eins abschneiden solange das eine "0" oder ein "," ist.

Vukloc 11. Okt 2011 22:09

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.

Satty67 11. Okt 2011 22:13

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:
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;
€: DecimalSeparator statt dt. Komma... ist aber wohl in ganz neuen Delphi-Versionen auch schon wieder veraltet?
€2: Sonderfall abgefangen

Union 11. Okt 2011 22:22

AW: 0en nach Komma entfernen
 
Die Funktionen sind in strutils enthalten, dies müsste der uses Klausel hinzugefügt werden.

FredlFesl 12. Okt 2011 07:13

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

Vukloc 12. Okt 2011 12:04

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 15:47 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz