![]() |
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.... |
Hallo,
die Nachkommastellen erhälst Du mit der Funktion "Frac()". Für nähere Infos einfach mal in die Delphi-Hilfe gucken. |
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 |
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. |
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. |
Ö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.
|
Zitat:
|
Es geht um das Abschneiden, nicht um das Runden (im ersten Posting wollte Rapthor von 0.77625 auch nur 0,77 haben).
|
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.
|
Rauchen gefährdet die Lunge ..... oder die Gesundheit oder beides. Danke allen ... hab's hinbekommen!
|
Auch wenn du's schon hast, ich hätte das so gemacht.
Delphi-Quellcode:
Vielleicht hilft dir das ja trotzdem (wenn's funzt).
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; Bis dann, man ließt sich. Stanlay :hi: |
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)).
|
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?
|
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.
|
Moin Zusammen,
auch wenn's nur Daniels Variante gecodet ist:
Delphi-Quellcode:
exValue := 0.77625;
ShowMessage(IntToStr(Trunc(Frac(exValue)*100))); @d3g Zitat:
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. |
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 05:41 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