Warum ergeben diese Teilungsgleichungen Null?

8

Das Ergebnis aller Divisionsgleichungen in der folgenden for-Schleife ist 0. Wie kann ich es erhalten, um mir eine Dezimalzahl zu geben, zum Beispiel:

%Vor%

Code:

%Vor%

Antwort:

Danke Jon und allen, das ist was ich tun wollte:

%Vor%     
Edward Tanguay 30.07.2009, 09:30
quelle

11 Antworten

29

Sie verwenden int / int, was alles in Integer-Arithmetik ausführt, selbst wenn Sie eine Dezimal / Doppel / Float-Variable zuweisen.

Erzwingen Sie, dass einer der Operanden den Typ hat, den Sie für die Arithmetik verwenden möchten.

%Vor%

Ergebnisse:

%Vor%

(usw.)

Beachten Sie, dass nicht den exakten Wert darstellt, der durch float oder double dargestellt wird - Sie können <0,01> nicht genau als float oder double darstellen . Die String-Formatierung rundet das Ergebnis effektiv ab. Sehen Sie meinen Artikel über .NET floating binary point für weitere Informationen sowie eine Klasse, mit der Sie die exakter Wert eines Double.

Ich habe mich nicht damit beschäftigt, 100L für result2 zu verwenden, weil das Ergebnis immer das gleiche wäre.

    
Jon Skeet 30.07.2009, 09:32
quelle
11

Versuchen Sie

%Vor%     
Lloyd 30.07.2009 09:32
quelle
5

weil i ein int ist: i / 100 führt eine ganzzahlige Division durch, dann wird das Ergebnis, das immer 0 ist, an den Zieltyp übergeben. Sie müssen in Ihrem Ausdruck mindestens ein nicht-int-Literal angeben:

%Vor%     
dfa 30.07.2009 09:32
quelle
5

Ich weiß, dass das nicht der Punkt der Frage ist ... aber ich denke, dass 297.0 / 315 0.942857142857143 statt 0.30793650793650793650793650793651 ist.

:)

    
headsling 30.07.2009 11:35
quelle
2

Da i eine ganze Zahl ist und 100 eine ganze Zahl ist, haben Sie eine ganzzahlige Division

Versuchen Sie (dezimal) i / 100.0 statt

    
Scoregraphic 30.07.2009 09:32
quelle
1

Ganz gleich, wo Sie es speichern, eine Ganzzahl geteilt durch eine ganze Zahl ist immer eine Ganzzahl.

    
lotsoffreetime 30.07.2009 09:33
quelle
1

Sie müssen eine Gleitkommaoperation "double / double" anstelle von "int / int"

erzwingen %Vor%     
Tormod 30.07.2009 09:36
quelle
0

Dies ist eine Ganzzahl-Division, unabhängig vom Typ der Variablen, in der Sie speichern. so int / int = int

    
Ahmed Said 30.07.2009 09:35
quelle
0
%Vor%     
Steve Gilham 30.07.2009 09:35
quelle
0

Weil i ein int Wert ist und Sie durch eine ganze Zahl dividieren, ist das Ergebnis eine ganze Zahl! Sie müssen also durch 100.0 teilen, um eine implizite Umwandlung in float zu erhalten oder 100f oder 100d anzugeben

    
Matthieu 30.07.2009 09:31
quelle
0

In meinem Fall hatte ich nur vars und no int

%Vor%     
Yohan Dahmani 13.09.2016 13:13
quelle

Tags und Links