![]() |
Nur die Zahl hinter dem Komma auswählen
Hi
Wie kann man die Zahl hinter dem komma auswählen. Also wenn z.B. 12,45 da steht will ich von dieser Zahl nur 0,45 auswählen. Wie geht das? |
Re: Nur die Zahl hinter dem Komma auswählen
Delphi-Quellcode:
liefert dir den Nachkommaanteil einer Zahl
Frac(Zahl)
|
Re: Nur die Zahl hinter dem Komma auswählen
danke aber gibt das jetzt 0,45 oder 45 wieder?
|
Re: Nur die Zahl hinter dem Komma auswählen
Ansonsten nimm doch Trunc und ziehe den Wert von Trunc von deinem Ausgangswert ab.
|
Re: Nur die Zahl hinter dem Komma auswählen
Zitat:
|
Re: Nur die Zahl hinter dem Komma auswählen
Zitat:
Delphi-Quellcode:
komischerweise wird das immer null :gruebel:
procedure TForm3.Button1Click(Sender: TObject);
var a,b,c : Integer; begin a:=StrtoInt (edit1.text); b:=a div 60 div 60; c:=b-Trunc(b); Label1.caption:= FloattoStr (c); end; |
Re: Nur die Zahl hinter dem Komma auswählen
div ist auch eine Division, bei der Ganzzahlen rauskommen, du hast also einfach keine Nachkommastellen ;)
|
Re: Nur die Zahl hinter dem Komma auswählen
:wiejetzt:
:?: eine division bei der keine kommazahlen enstehen :?: |
Re: Nur die Zahl hinter dem Komma auswählen
Man kennt das noch aus der Grundschule: 7/3 = 2 Rest 1. Also ergibt 7 DIV 3 2 und 7 MOD 3 1(MOD steht für Modulo, also den Rest bei ganzzahliger Division).
|
Re: Nur die Zahl hinter dem Komma auswählen
Ja, genau so ist es: Ganzzahldivision.
Das ist grundlegend, wenn du z.B. nur mit Integern rechnest. div gibt den ganzzahligen Wert der Division zurück, mod den Rest der Division. Für Division mit Gleitkommazahlen ist / gedacht. |
Re: Nur die Zahl hinter dem Komma auswählen
also ich will eine division mit einem ergebniss mit komma
in dem fall muss ich ja / einsetzen dann würde das ja dann so aussehen
Delphi-Quellcode:
jedoch tritt dann dieser Fehler auf
procedure TForm3.Button1Click(Sender: TObject);
var a,b,c : Integer; begin a:=StrtoInt (edit1.text); b:=a / 60 / 60; c:=b-Trunc(b); Label1.caption:= FloattoStr (c); end; b:=a / 60 / 60; [Fehler] Unit3.pas(32): E2010 Inkompatible Typen: 'Integer' und 'Double' |
Re: Nur die Zahl hinter dem Komma auswählen
Wenn man Division mit Integern (= Ganzzahlen) macht, ist dafür div gedacht, da Integer eben ganze Zahlen sind und nichts nach den Komma darstellen können.
Für "normale" Divisionen sind Gleitkommazahlen da (schau mal in der Delphi-Hilfe unter "Reelle Typen"). b müsste halt eine Gleitkommazahl sein! |
Re: Nur die Zahl hinter dem Komma auswählen
Klar:
Delphi-Quellcode:
Änder das mal ab:
var a,b,c : Integer;
Delphi-Quellcode:
[EDIT]Quatsch! So wäre es ausreichend:
var a,b,c : Double;
Delphi-Quellcode:
[/EDIT]
var a, b: integer;
c: Double; |
Re: Nur die Zahl hinter dem Komma auswählen
und was macht Double?
|
Re: Nur die Zahl hinter dem Komma auswählen
Double "macht" nichts, es ist ein Fließkommatyp.
|
Re: Nur die Zahl hinter dem Komma auswählen
:?: Fließkommatyp :?:
|
Re: Nur die Zahl hinter dem Komma auswählen
Wie gesagt, schau mal unter reelle Typen.
Typen, die Gleitkommazahlen darstellen können, sind z.B.: - Single - Double - Real - Extended Single ist etwas ungenau bei vielen Nachkommastellen, Double ist da schon genauer. Extended ist vor allem für sehr große Zahlen geeignet. Real ist der wohl gebräuchlichste Typ, ist in seiner aktuellen Implementierung identisch mit Double. Mein Tipp: verwende Real! Fließkommatyp = Typen für Gleitkommazahlen, also Zahlen, die auch was nach dem Komma darstellen können! |
Re: Nur die Zahl hinter dem Komma auswählen
Ich kenne die Hilfe von Delphi 2005 nicht, aber unter dem Suchbegriff "elementare Datentypen" sollte sich eine ausführliche Beschreibung finden lassen.
|
Re: Nur die Zahl hinter dem Komma auswählen
Delphi-Hilfe Reelle Typen Ein reeller Typ definiert eine Menge von Zahlen, die in Gleitkommanotation dargestellt werden können. Die folgende Tabelle enthält die Bereiche und Speicherformate der fundamentalen reellen Typen in Win32. Fundamentale reelle Typen in Win32:
Code:
Der generische Typ Real entspricht in seiner aktuellen Implementierung dem Typ Double.
Typ Bereich Signifikante Größe
Stellen in Byte Real48 -2,9 x 10^39 .. 1,7 x 10^38 11-12 6 Single -1,5 x 10^45 .. 3,4 x 10^38 7-8 4 Double -5,0 x 10^324 .. 1,7 x 10^308 15-16 8 Extended -3,6 x 10^4951 .. 1,1 x 10^4932 10-20 10 Comp -2^63+1 .. 2^63 1 10-20 8 Currency -922337203685477.5808 .. 10-20 8 922337203685477.5807 |
Re: Nur die Zahl hinter dem Komma auswählen
du solltest dir mal die standarttypen genauer anschauen :zwinker:
In einen Integer passen nur ganze Zahlen rein: zB 5 oder 87 oder auch -44 In einen reelen Typ (zB Double, Extended etc) passen auch kommazahlen rein: zB 4,36 oder 45,98 oder -445,144 Der Operator div gibt eine ganze Zahl aus, zB 9 div 2 = 4 Der Operator / gibt eine Kommazahl aus, zB 9 / 2 = 4,5 Da Integer und 4,5 nicht zueinander passen kommt dieser Fehler. |
Re: Nur die Zahl hinter dem Komma auswählen
da wir gerade beim thema sind:
ich habe mal ne funktion gesehen die immer abrundet. das ist doch im prinzip dasselbe wie trunc oder ? |
Re: Nur die Zahl hinter dem Komma auswählen
Ja.
|
Re: Nur die Zahl hinter dem Komma auswählen
dann ist diese funktion wohl sehr sinnlos
|
Re: Nur die Zahl hinter dem Komma auswählen
Zitat:
Trunc rundet immer gegen 0, also schneidet den Teil hinter dem Komma einfach ab: Trunc(2.7) = 2 Trunc(-2.7) = -2 Floor rundet immer ab, also gegen die nächste kleinere ganze Zahl: Floor(2.7) = 2 Floor(-2.7) = -3 |
Re: Nur die Zahl hinter dem Komma auswählen
:wall: Wer braucht schon negative Zahlen? :mrgreen:
Hast natürlich Recht. |
Re: Nur die Zahl hinter dem Komma auswählen
:wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall:
HMPF! hab ich nie dran gedacht, obwohl es so logisch is :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: |
Re: Nur die Zahl hinter dem Komma auswählen
So sieht die Floor-Funktion in der Unit Math übrigens aus :mrgreen:
Delphi-Quellcode:
function Floor(const X: Extended): Integer;
begin Result := Integer(Trunc(X)); if Frac(X) < 0 then Dec(Result); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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