2011-01-03 23 views

Antwort

11

Es ist, weil die / operator ist eine Integer-Division durchführt, wenn beide Operanden ganze Zahlen sind. Sie können dies tun:

float ans = (i/3.0f); 
+1

Bonus +1 für die Verknüpfung mit der entsprechenden MSDN-Seite. –

+0

Vielen Dank dafür - aber warum macht "f" die Nummer anders? –

+2

@ m.edmondson: Numerische Suffixe sind Hinweise für den Compiler, dass eine Literalnummer als ein bestimmter Typ behandelt werden sollte. Es ist eine Abkürzung für '(float) 3.0' – Tony

6

Sie benötigen einen des Operanden einen Schwimmer zu machen, sonst wird die Berechnung mit ganzen Zahlen erste gemacht wird (was immer in einer ganzen Zahl führt), bevor das Ergebnis mit einem Schwimmer zu konvertieren.

float ans = ((float) i)/3; 
0

Es tut Integer-Division, weil i ein int und 3 ist ein int ist. Versuchen Sie folgendes:

float ans = ((float)i/3.0f); 
0

Verwendung float ans = (i/3.0) oder float ans = (i/3f) oder float ans = ((float)i/3). / führt eine Integer-Division durch, wenn beide Seiten vom Typ Integer sind.

0

Sehr einfach: in C#, int/int = int.

0

Was Sie suchen ist:

float ans = ((float)i/3); 

Ansonsten sind Sie zwei ganzen Zahlen nehmen und Dividieren sie die Anzahl der ganzen Zeit zu finden, der Divisor in der Dividende geht. (Wie erwähnt, ein int/int = int unabhängig vom Zieltyp. Und für den Compiler ist "3" eine andere Ganzzahl (es sei denn Sie spezifizieren es als 3.0f))

0

Ich gehe davon aus, dass Sie dies in einer haben Schleife irgendeiner Art. Sie könnten stattdessen Ihre i-Variable als Float angeben.

for (float i = 0; i < 10; i++) 
{ 
    float ans = (i/3); 
    // statements 
} 

Nur eine andere Lösung.