Как +1 к цифре, если первый десятичный знак больше или равен 5?

0

Моя цель - добавить значение перед моим десятичным знаком, когда первые десятичные знаки больше или равны 5.

Например:

#include <iostream>
using namespace std;

int main()
{
    float num = 0.5222f;

    cout << (int)num << endl;

    cin.get();
    return 0;
}

Мой предполагаемый результат: 1 вместо 0. Как мне изменить код, чтобы получить ожидаемый результат?

Теги:
floating-point
math
rounding

5 ответов

4

Если вы хотите округлить это значение до ближайшего целого числа, вы можете просто добавить 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);
  • 1
    Первый метод потерпит неудачу в реализациях, в которых диапазон типа int не распространяется на значение, преобразованное из float . Лучше использовать процедуру round , специально разработанную для этой функции и не изменяющую типы.
  • 0
    @EricPostpischil: num + 0.5 даст результат типа double из-за литерала 0.5 ... вы пытаетесь указать случай, когда результат этого добавления будет больше, чем максимально возможное значение, хранимое как int ?
Показать ещё 2 комментария
3

В С++ 11 теперь мы имеем std :: round, так что это будет нормально работать:

std::cout << std::round(num) << std::endl;

также потребуется включить <cmath>. Метод non-С++ 11 с использованием floor:

std::cout << floor(num + 0.5) << std::endl;
1

Если вы поместите float в int его до нуля, отбросив дробную часть числа.

То, что вы хотите сделать, это сначала вызвать roundf. (round для двойного, roundf для поплавка)

cout << (int)roundf(num) << endl;
0

Я просто добавляю:

float num = 0.5222f;
cout << std::floor(num + 0.5);

Таким образом, вы даже можете решить округлить, если (скажем) первая цифра> 3

float num = 0.3222f;
cout << std::floor(num + 0.7);

Не знаю, сколько полезного, но... вы можете!

-2

Попробуйте функцию ceil. Он округляет число от 0,5 до целого десятичного числа на 1.

http://en.cppreference.com/w/cpp/numeric/math/ceil

  • 0
    Это вывело бы 2 для 1.1
  • 0
    Я думаю, это неправильно, тогда мой мозг быстро щелкнул этим. Может быть, он просто не очень хорошо объяснил проблему, но это именно то, что он хочет сделать? Я не знаю.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню