Entwickler-Ecke

C# - Die Sprache - float... Warum runde Zahlen?


vit30 - Do 07.01.10 11:48
Titel: float... Warum runde Zahlen?
Hallo!
Datentyp "float" gibt es doch für die Zahlen mit Komma.
Warum wenn ich z.B. schreibe:

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 - 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:

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.


danielf - 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

C#-Quelltext
1:
float a = 8f / 3f;                    


Gruß Daniel

PS: Code-Snipples bitte mit entsprechendem Tag verstehen (Bereiche)


vit30 - Do 07.01.10 12:12

Danke!
Alles klar!


Delete - Sa 09.01.10 18:19

Hallo,

eine kleine Erklärung findest Du auch unter http://openbook.galileocomputing.de/visual_csharp/visual_csharp_02_004.htm#mje0d9391bbdfc4acf46bdf41a17ee604b (unter "Besonderheit einer Division").


Grüße


Kha - 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: .


Delete - 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