2014-12-16 2 views
2
#include <iostream> 

int main() 
{ 
    long long w_popn; 
    long long us_popn; 
    std::cout << "Enter the world's population: "; 
    std::cin >> w_popn; 
    std::cout << "Enter the population of the US: "; 
    std::cin >> us_popn; 
    std::cout << "The population of the US is " << float (us_popn/w_popn) << "% of the world population" << std::endl; 
return 0; 
} 

В настоящее время я задаю некоторые вопросы по упражнениям из C++ primer plus, и я застрял в самом последнем заявлении печати в моем коде. В частности, часть, где я печатаю float (us_popn/w_popn). Есть ли быстрый и грязный способ превратить результаты в плавающее число в инструкции cout без необходимости вручную сохранять результаты в переменной float? Я спрашиваю об этом, потому что кажется, что введение типа float перед целым делением в выражении cout не влияет на него, и я получаю 0 в результате усечения.C++ type cast a арифметическая операция

+7

Попробуйте 'поплавок (us_popn)/w_popn'. Вы производите тип результата деления двух целых чисел на 'float', который бесполезен, вы должны отличать _before_ операцию, так что оба операнда будут тогда' float', что даст результат с плавающей запятой. – legends2k

+0

Я бы рекомендовал не использовать (float) x/y, но использовать x/(float) y, это точно означает, что вы выполняете деление по плавающей запятой и логически точнее. –

ответ

0

... кажется, что помещение приведения типа поплавка перед делением числа в соиЬ заявлении, кажется, не влияет на это, и я в конечном итоге получение 0 в результате усечения.

Вы производите тип в неправильном порядке. В следующем примере:

float (us_popn/w_popn) 

Целое деление выполняется первый (например, 500/1000 результаты длительно длиной 0, не плавают 0.5). Затем результат преобразуется в float. Кастинг операндов так:

(float) us_popn/w_popn 
+0

легенды2k уже ответили, что. – user1

0

Вы должны бросить операнды до разделения, в противном случае вы будете литья результата:

static_cast<float>(us_popn)/static_cast<float>(w_popn)