Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alles, was vor dem Komma steht, abschneiden (https://www.delphipraxis.net/4209-alles-vor-dem-komma-steht-abschneiden.html)

Rapthor 19. Apr 2003 09:58


Alles, was vor dem Komma steht, abschneiden
 
Wie kann ich von einer Doublezahl den Ganzzahligen Teil (also den vor dem Komma) abschneiden, so dass ich nurnoch die x Stellen nach dem Komma zu sehen bekomme.

Bei ner 34,77625 will ich also nur die 77 zu sehen bekommen etc....

Daniel 19. Apr 2003 10:02

Hallo,

die Nachkommastellen erhälst Du mit der Funktion "Frac()". Für nähere Infos einfach mal in die Delphi-Hilfe gucken.

Rapthor 19. Apr 2003 10:09

Okay diese Funktion zeigt mir nun alle Stellen nach dem Komma an...
Und das sind jede Menge....es gibt doch eine Funktion, mit der man für eine Doublezahl nur die ersten beiden Kommastellen berechnet oder?
Diese Vorschrift brauch ich mal kurz :D

Daniel 19. Apr 2003 10:12

Einfach Rechnen:
Deine Zahl 10 multiplizieren, mit "Int()" den ganzzahligen Anteil ermitteln und diesen dann wieder durch 10 teilen.

Solltest Du nicht nach der zweiten Nachkommastelle abschneiden sondern runden wollen, so solltest Du Dir die Funktion "Round()" ansehen.

d3g 19. Apr 2003 10:31

Int(0.56789 * 10) / 10 = Int(5.6789) / 10 = 5 / 10 = 0.5.

Für zwei Nachkommastellen solltest du also mit 100 multiplizieren bzw. durch 100 dividieren:

Int(0.56789 * 100) / 100 = Int(56.789) / 100 = 56 / 100 = 0.56.

Luckie 19. Apr 2003 11:17

Öhm, wenn ich 0,56789 auf zwei Stellen nach dem Komma runde, dann bekomme ich aber 0,57 raus. Die dritte Stelle nach dem Komma ist größer 5, also wird die zweite Stelle nach dem Komma aufgerundet.

Chewie 19. Apr 2003 11:21

Zitat:

Zitat von Luckie
Öhm, wenn ich 0,56789 auf zwei Stellen nach dem Komma runde, dann bekomme ich aber 0,57 raus. Die dritte Stelle nach dem Komma ist größer 5, also wird die zweite Stelle nach dem Komma aufgerundet.

Aber es wird hier doch nicht naürlich, sondern abgerundet.

d3g 19. Apr 2003 11:22

Es geht um das Abschneiden, nicht um das Runden (im ersten Posting wollte Rapthor von 0.77625 auch nur 0,77 haben).

Luckie 19. Apr 2003 11:27

Mist schon wieder reingefallen. Ich bin noch nicht wach, habe noch nichts im Bauch und noch keien Zigarette geraucht. Ich glaube eins von diesen drei Dingen sollte ich tun bevor ich hier weiter mache.

Rapthor 19. Apr 2003 11:47

Rauchen gefährdet die Lunge ..... oder die Gesundheit oder beides. Danke allen ... hab's hinbekommen!

Stanlay Hanks 19. Apr 2003 17:18

Auch wenn du's schon hast, ich hätte das so gemacht.

Delphi-Quellcode:
function TForm1.KommaCut(Text : String) : String;
 var
 kpos,i: Integer;
 str  : String;
 begin
  kpos := pos(',',Text)+1;

  For i:= kpos to Length(Text) do begin
  str := str + Text[i];
  end;
  KommaCut := str;
  end;
Vielleicht hilft dir das ja trotzdem (wenn's funzt).

Bis dann, man ließt sich. Stanlay :hi:

d3g 19. Apr 2003 17:55

Böse, böse ;-) (weil: Ländereinstellungenabhängig (bei Dezimalpunkt statt Dezimalkomma bleibt der String so wie er ist), langsam (das sind Strings eben, HugeStrings - wie du sie benutzst - besonders)).

Stanlay Hanks 19. Apr 2003 18:07

Ich suche ja speziell nach dem Komma. Wenn man alles vor einem Dezimalpunkt löschen will, muss man das eben ändern. Oder hast du was anderes gemeint?

d3g 19. Apr 2003 18:12

Nein, genau das. Der Punkt (Wortspiel :mrgreen:) ist ja, dass der Entwickler nicht wissen kann, ob in dem String ein Dezimalpunkt, ein Dezimalkomma oder ein anderes Trennzeichen ist. FloatToStr() richtet sich nämlich nach der Länderzoneneinstellung. Man müsste umständlich über das Win32-API diese Einstellung herausfinden und da die ganze Funktion mit Sicherheit noch langsamer als das einfache int(frac(f) * 100) / 100 ist, ist davon ganz abzuraten.

Christian Seehase 19. Apr 2003 18:18

Moin Zusammen,

auch wenn's nur Daniels Variante gecodet ist:

Delphi-Quellcode:
  exValue := 0.77625;
  ShowMessage(IntToStr(Trunc(Frac(exValue)*100)));

@d3g
Zitat:

Zitat von d3g
Man müsste umständlich über das Win32-API diese Einstellung herausfinden...

Nein, muss man nicht ;-)

Delphi nimmt einem diese Arbeit beim Programmstart ab, und stellt das Zeichen in der Variablen DecimalSeparator zur Verfügung.
Solange niemand die Einstellung zwischen Programmstart und Anwendug der Variablen geändert hat stimmt der enthaltene Wert.

Stanlay Hanks 19. Apr 2003 18:20

Jetzt hab ich kapiert, was du meinst. Aber er hat ja geschrieben:
'Alles vor dem Komma löschen'. Aber du hast natürlich recht. Aber da ich nicht mal wüsste, wie man das mit der API macht, hab ich da gar nicht dran gedacht. Man liest sich, Stanlay. :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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