Autor Beitrag
vit30
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Do 07.01.10 11:48 
Hallo!
Datentyp "float" gibt es doch für die Zahlen mit Komma.
Warum wenn ich z.B. schreibe:
ausblenden C#-Quelltext
1:
     float a = 8 / 3;					

bekomme ich 2 als Ergebnis ?
Was soll ich verwenden, um richtige Antwort zu bekommen?

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 07.01.10 11:58 
Hallo,

8 und 3 sind Integers; deshalb wird zunächst eine Integer-Division durchgeführt und erst das Ergebnis als float registriert. Wenn du eine float-Division haben willst, musst du (mindestens) eine der Zahlen als float angeben:
ausblenden C#-Quelltext
1:
     float a = 8 / 3.0;					

Gruß Jürgen

PS. Daniels Lösung ist genauso korrekt. Bei diesem Einzeiler habe ich mir den Verweis auf die Code-Markierung verkniffen; aber korrekt ist es natürlich, wie Christians Änderung zeigt.


Zuletzt bearbeitet von JüTho am Do 07.01.10 12:08, insgesamt 1-mal bearbeitet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 07.01.10 11:59 
Hallo,
das liegt daran, dass du zwei int-Typen dividierst und das Ergebnis dann wieder vom Typ int ist (Wunder mich, dass du keinen compiler-Hinweis bekommst). Wenn du die int typen in float umwandelst sollte es gehen
ausblenden C#-Quelltext
1:
float a = 8f / 3f;					


Gruß Daniel

PS: Code-Snipples bitte mit entsprechendem Tag verstehen (Bereiche)
vit30 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 38



BeitragVerfasst: Do 07.01.10 12:12 
Danke!
Alles klar!
Maxboy
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 09.01.10 18:19 
Hallo,

eine kleine Erklärung findest Du auch unter openbook.galileocomp...4acf46bdf41a17ee604b (unter "Besonderheit einer Division").


Grüße
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 09.01.10 18:57 
...die dummerweise nicht nur unnötig kompliziert, sondern schlichtweg falsch ist. Lässt mich gerade etwas an der Qualität des restlichen OpenBook zweifeln :gruebel: .

Zitat:
Die Laufzeitumgebung erkennt, dass es sich um ganze Zahlen handelt, und interpretiert den Typ der beiden Literale jeweils als Integer.
Quatsch, das macht alles der Compiler. Es gibt hier keinen Grund, das Wort "Speicher" überhaupt zu erwähnen.

Zitat:
Dazu wird Speicher reserviert, der dem Typ des größten der beiden beteiligten Operanden entspricht
3.0 / 2 ist also ein double, 3 / 2.0 ein int :mrgreen: ?

In C# ergibt die Divison zweier ints wieder einen, damit ist doch alles gesagt :nixweiss: .

_________________
>λ=
Maxboy
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 10.01.10 12:33 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
...die dummerweise nicht nur unnötig kompliziert, sondern schlichtweg falsch ist. Lässt mich gerade etwas an der Qualität des restlichen OpenBook zweifeln :gruebel: .


Immerhin wird das Thema dort erwähnt. Ich lerne C# noch und habe mehrere "Einsteiger"-Bücher und nur in diesem Buch wurde dieses Problem erwähnt.

Die Erklärung mag evtl. falsch sein, jedoch hat das Ergebnis dann wohl gestimmt.

Immerhin besser, als totschweigen. ;)


Grüße