Моя цель - добавить значение перед моим десятичным знаком, когда первые десятичные знаки больше или равны 5.
Например:
#include <iostream>
using namespace std;
int main()
{
float num = 0.5222f;
cout << (int)num << endl;
cin.get();
return 0;
}
Мой предполагаемый результат: 1 вместо 0. Как мне изменить код, чтобы получить ожидаемый результат?
Если вы хотите округлить это значение до ближайшего целого числа, вы можете просто добавить 0.5
до его включения в int:
float num = 0.5222f;
cout << (int)(num + 0.5);
или, альтернативно, вы можете использовать одну из следующих функций из заголовка <cmath>
:
double round (double x);
float roundf (float x);
long double roundl (long double x);
В С++ 11 теперь мы имеем std :: round, так что это будет нормально работать:
std::cout << std::round(num) << std::endl;
также потребуется включить <cmath>
. Метод non-С++ 11 с использованием floor:
std::cout << floor(num + 0.5) << std::endl;
Если вы поместите float
в int
его до нуля, отбросив дробную часть числа.
То, что вы хотите сделать, это сначала вызвать roundf
. (round
для двойного, roundf
для поплавка)
cout << (int)roundf(num) << endl;
Я просто добавляю:
float num = 0.5222f;
cout << std::floor(num + 0.5);
Таким образом, вы даже можете решить округлить, если (скажем) первая цифра> 3
float num = 0.3222f;
cout << std::floor(num + 0.7);
Не знаю, сколько полезного, но... вы можете!
Попробуйте функцию ceil. Он округляет число от 0,5 до целого десятичного числа на 1.
int
не распространяется на значение, преобразованное изfloat
. Лучше использовать процедуруround
, специально разработанную для этой функции и не изменяющую типы.num + 0.5
даст результат типаdouble
из-за литерала0.5
... вы пытаетесь указать случай, когда результат этого добавления будет больше, чем максимально возможное значение, хранимое какint
?