AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

0en nach Komma entfernen

Ein Thema von Vukloc · begonnen am 11. Okt 2011 · letzter Beitrag vom 12. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
Vukloc

Registriert seit: 12. Sep 2011
25 Beiträge
 
Delphi 7 Enterprise
 
#1

0en nach Komma entfernen

  Alt 11. Okt 2011, 20:56
Delphi-Version: 7
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.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 21:07
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);
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 21:44
Macht das FloatToStr nicht automatisch?
  Mit Zitat antworten Zitat
Vukloc

Registriert seit: 12. Sep 2011
25 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 21:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 21:58
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Vukloc

Registriert seit: 12. Sep 2011
25 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 22:09
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.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 22:13
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

Geändert von Satty67 (11. Okt 2011 um 22:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: 0en nach Komma entfernen

  Alt 11. Okt 2011, 22:22
Die Funktionen sind in strutils enthalten, dies müsste der uses Klausel hinzugefügt werden.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#9

AW: 0en nach Komma entfernen

  Alt 12. Okt 2011, 07:13
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
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Vukloc

Registriert seit: 12. Sep 2011
25 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: 0en nach Komma entfernen

  Alt 12. Okt 2011, 12:04
@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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 Uhr.
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