2014-09-22 2 views
0

я делаю что-то вроде этогоПолучение Int вместо поплавка

int a = 3; 
int b = 4; 
float c = a/b ; //This returns 0 while its suppose to return 0.75 

Я хотел бы знать, почему приведенный выше код не работает? Я понимаю, что 3 - это int, а 4 - int. Однако результатом является float, которому присваивается float. Однако я получаю 0 здесь. Любые предложения о том, что я могу делать неправильно?

+0

СОВЕТ: результат целочисленного деления является целым числом. Затем результат разделения присваивается плавающей позиции. Это 'a/b' приводит к' int'. Бросьте, что вы хотите, но вы не получите 0,75 от него. – spencer7593

+0

Можете ли вы положить это как ответ – MistyD

+0

Компилятор не выглядит так далеко. –

ответ

2
float c = a/b ; 

a и b представляют собой целые числа, так что это целочисленное деление.

От стандарта C++:

5.6 Мультипликативных операторы [expr.mul]

Для интегральных операндов оператора/дает алгебраический фактор с любой дробной частью отбрасывается.

Instaed, попробуйте следующее:

float c = a/static_cast<float>(b); 

(Как @TrevorHickey предложил, static_cast<float> лучше старого стиля (float) литая.)

+0

Не могли бы вы рассказать мне, почему вы превратили b в плавание? – MistyD

+0

Если a или b является поплавком, результатом будет float.Также посмотрите на static_cast, так как лучше в C++ –

+0

@TrevorHickey Вы имели в виду static_cast? (Во-первых, я классифицировал вопрос как C-связанный. Вот почему старый стиль :)) – AlexD

2

Вы не можете разделить два целых и получить поплавок , Вы либо должны бросать в float, либо иметь типы как float.

float a = 3; 
float b = 4; 
float c = a/b; 

или

float c = (float)a/(float)b; 
0

ПОДСКАЗКА: результат от целочисленного деления является целым числом. Затем результат разделения присваивается плавающей позиции. Это a/b приводит к int. Бросьте, что вы хотите, но вы не получите 0,75 от него.

3

Деление оценивается первым, и поскольку это два целочисленных операнда, он вычисляет целое число ... которое затем получает только привязанный к float.

Это результат predefined set of rules, который сбрасывает типоразмер. Чтобы заставить результат быть определенного типа (по крайней мере), по крайней мере один из операндов должен быть такого типа. (Через static_cast< >)

Таким образом:

float c = a/static_cast<float>(b); 
0

Если вы работаете в C++, вы должны использовать метод static_cast над неявной гипсе. Это гарантирует, что тип можно безопасно отобразить во время компиляции.

float c = a/static_cast<float>(b);