2015-01-11 11 views
-1
#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main() { 

float f=static_cast<float>(5/2); 
printf("%f",f); 

return 0; 
} 

Ответ всегда 2.0. Я искал, прежде чем спрашивать, но не смог найти ответ.Как набирать cast int деление на плавающие точки?

+1

Вы выполняете целочисленное деление * до * литье в 'float', так что вы литье результата целочисленного деления. Если вы хотите выполнять разделение с плавающей запятой, вам необходимо в первую очередь разделить значения с плавающей запятой. – jamesdlin

ответ

0

Это работает на моем компиляторе:

#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main() { 

float f=(float)5/(float)2; 
printf("%f",f); 

return 0; 
} 
+0

Компилятор - http://ideone.com/VtwKuC –

2

Вам просто нужно сделать

float f = 5.0f/2; 

В своем коде, 5 и 2 являются int s, поэтому в 5/2 оператор / оператор целочисленного деления; результат всегда будет целым числом, в данном случае 2. Только после этого он преобразуется в float, давая 2.0.

Вам необходимо выполнить деление с плавающей запятой, поэтому по крайней мере один из операндов должен иметь тип с плавающей точкой. Вы могли бы просто написать 5.0, без f, но по умолчанию будет иметь тип double, и результат будет преобразован в float - преобразование, которое может вызвать проблемы (не здесь для этих конкретных постоянных значений, но все же, лучше используйте правильный тип в первую очередь).

0
int main() { 

    float f = 5.0/2; 
    printf("%f", f); 
    return 0; 
} 
+1

запятая в 'printf' нет период. – ryanpattison