Autor |
Beitrag |
buSC
      
Beiträge: 39
|
Verfasst: Di 16.02.10 17:44
hallo
eine kleine Frage: wie kann ich ein double variable in ein Integer speichern?
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| i:integer; d:double; begin d:=7; i:=integer(d); end |
vielen Dank im Voraus.
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Di 16.02.10 17:49
Funktionen wie Trunc(), Round(), Floor(), Ceil() sind da hilfreich.
Trunc() = Dezimalstellen abschneiden
Round() = runden, Details in OH
Floor() = abrunden
Ceil() = aufrunden
|
|
buSC 
      
Beiträge: 39
|
Verfasst: Mi 17.02.10 07:39
ja vielen Dank an Jakob fuer die Antwort,
aber meinst du ,dass es mit dem "type cast" nicht geht ?
Danke nochmal 
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 17.02.10 08:47
Mancher TypeCast ist einfach Unsinn. Einen Float ind einen Integer zu casten gehört dazu.
Woher soll der Compiler wissen, welchen Inhalt dein Double zur Laufzeit hat? Da können dann auch Nachkommastellen enthalten sein. Was soll dann beim Casten passieren? Runden? Abschneiden?
Darum gibt es die entsprechenden Funktionen, die die Umwandlung machen.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 17.02.10 09:44
Außerdem ist ein double doch 64 Bit, ein Integer jedoch nur 32 ?
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Mi 17.02.10 10:10
jasocul hat folgendes geschrieben : | Mancher TypeCast ist einfach Unsinn. Einen Float ind einen Integer zu casten gehört dazu. |
In dieser Allgemeinheit ist eher Deine Aussage unsinnig bzw. falsch. Integer-Typecasts via Pointer oder Integer-Array- bzw. Record-Typecasts auf Fließkommavariable werden zB benutzt, um den Wert zu klassifizieren (IsNaN, IsInf etc., sieh Dir mal den RTL-Source an!) Oder: Versuch mal ohne diese Typecasts herauszufinden, ob eine Extended-Variable Pseudo-Denormals oder Unnormals enthält. Oder beleg mal eine Single-Variable mit dem nächstgrößeren Wert, oder ...
Gruß Gammatester
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 17.02.10 13:23
@ Gammatester:
Hier geht es doch nicht im TypeCasts via Pointer, Arrays oder andere "Tricks". Ebensowenig deutet hier irgendwas auf tiefgreifende mathematische Funktionen oder Probleme hin.
Die von dir angegebenen Bereiche sind sehr speziell und finden in der "üblichen" Anwendungsentwicklung kaum eine Nutzung. Somit ist meine Aussage ganz allgemein betrachtet schon richtig. In speziellen Bereichen hast Du aber Recht. Aber auf die war die ursprüngliche Frage offensichtlich nicht ausgerichtet.
|
|
buSC 
      
Beiträge: 39
|
Verfasst: Do 18.02.10 13:18
HALLO
danke an alle ,fuer eure Antworte
wie ich verstanden habe ,ein Typecast von double nach integer geht nicht.
aber jetzt andere Frage ,ist es ein typeCast von integer nach double moeglich,genauer gesagt
habe ich folgendes Problem:
gibts es ein Trick,mit dem man ein Integer-Array in einem doubleArray mit hilfe von
"copy" function kopieren kann?
intArr:array of integer;
dblArr:array of double;
ich will jetzt intArr in form von einem double-Array haben,wobei es wenig Aufwand bringt.
gibts es ein Trick dafuer oder ?
ich hab folgendes probiert aber bekomme ich der Nachricht:"incompatible types"
dblArr:=copy(intArr);
vielen Dank im voraus

|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Do 18.02.10 13:30
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 18.02.10 14:39
Nur mal aus neugierde... ich habe kein Delphi mehr zur hand und kann daher nicht selbst nachschauen.. aber, wie schaut denn der source von z.B. Trunc() aus?
Ich meine, irgendwann muß ja der Double in ein Integer gecastet werden, also muß es irgendwo in der Trunc-funktion einen typecast geben.
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 18.02.10 14:43
Aya hat folgendes geschrieben : | Ich meine, irgendwann muß ja der Double in ein Integer gecastet werden, also muß es irgendwo in der Trunc-funktion einen typecast geben. |
Ne, das läuft über den Co und wird nicht gecastet sondern umgerechnet
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 18.02.10 14:44
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 18.02.10 14:51
SUB ESP,12
FSTCW [ESP]
FWAIT
FLDCW cwChop
FISTP qword ptr [ESP+4]
FWAIT
FLDCW [ESP]
POP ECX
POP EAX
POP EDX
Zeilen 1994 bis 2003 in System.Pas bei Delphi 5
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 18.02.10 14:55
Okay, überredet.. dann gibt es eben echt keinen solchen type-cast in Delphi..
PS: Hab aber ja immerhin auch seit gut 3-4 Jahren kein Delphi mehr angerührt.. da vergisst man einiges ^^
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
guinnes
      
Beiträge: 182
Erhaltene Danke: 14
|
Verfasst: Do 18.02.10 15:29
Es kann keinen TypeCast geben zwischen Gleitkommazahlen und Integern, der Aufbau ist total andern :
Kannst du mir sagen, was diese DoubleZahl als Integer ist : 4002c3fe5c91d14e ?
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: Do 18.02.10 17:03
guinnes hat folgendes geschrieben : | Es kann keinen TypeCast geben zwischen Gleitkommazahlen und Integern, der Aufbau ist total andern :
Kannst du mir sagen, was diese DoubleZahl als Integer ist : 4002c3fe5c91d14e ? |
Da Dein double den Wert 2.345 hat, wären zwei sinnvolle Antworten:
a) 2
b) $4002c3fe5c91d14e
Hier werden leider die ganze Zeit Wert- und Variablen-Typecasts mit einander vermengt (engl. Onlinehilfe: Value typecasts bzw.Variable typecasts).
Beide sind hier allerdings nicht möglich. a) Weil ein double kein Ordinalwert ist, b) weil sizeof(double) <> sizeof(integer).
Gammatester
PS: In BP7 ist zB ein Variablen Typecast single -> longint möglich. Warum Delphi rumzickt ist nicht klar: Delphi 2 macht's zB noch, ebenso wie FreePascal 2.4)
|
|