2 Stimmen

arithmetische Operation in C#

Warum gibt mein C#-Code 0 zurück, wenn es 50 sein muss?

double c = (1 / 2) * 100;
Console.WriteLine(c); 

Was ist los?

5voto

Damien_The_Unbeliever Punkte 227101

1 , 2 y 100 in Ihrem Beispiel, sind alle int Literale. In C# gibt die Ganzzahldivision ganze Zahlen zurück und ignoriert den Rest. Erst nach der Berechnung von 1/2 (=0) und der Multiplikation mit 100 (=0) wird das Ergebnis in double

(1.0/2) * 100

würde zu dem erwarteten Ergebnis führen, da nun 1.0 ist eine double und erzwingt die Umwandlung der anderen Literale in double s auch vor der Durchführung der Berechnungen.

2voto

Petar Ivanov Punkte 89412

1 / 2 = 0

Dies ist eine ganzzahlige Division.

Versuchen Sie 1.0 / 2 , oder warum nicht double c = 50.0 direkt ;)

2voto

Rover Punkte 2163

Verwenden Sie dies: (float)1/(float)2. 1 und 2 sind ganze Zahlen.

2voto

Davide Aversa Punkte 5018

Versuchen Sie es mit

double c = (1.0 / 2.0) * 100.0;

EDIT: Ops. Das F ist unnötig :(

2voto

Nika G. Punkte 2304

wenn eine ganze Zahl als Double behandelt werden soll, verwenden Sie das Suffix d oder D

MSDN-Link hier

Code-Schnipsel:

double d = (1d / 2) * 100;

ou

double d = (1 / 2d) * 100;

oder sogar

double d = (1d / 2d) * 100;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X