Почему .5 становится 1,0 при округлении? Разве это не должно быть 0,5? - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь выучить C ++. Я использую Ma c xCode v. 11.4.1 на MacBook Pro (13 дюймов, середина 2012 г.) Процессор: 2,9 ГГц Двухъядерный Intel Core i7 Память: 8 ГБ

while (c < .9)
{
    std::cin >> c;
    std::cout << "\nc = " << c << '\n';
    array.push_back(c);
    c = round ((c *10)/10);
    std::cout << "After rounding, c = " << c << '\n';
}
std::cout << "\nSize of the vector \'array\' = " << array.size() << '\n';
for (int i = 0; i < array.size(); i ++ )
{
    std::cout << "\narray[" << i << "] = " << array[i] << std::endl;
}

Мои результаты :

.1

c = 0.1
After rounding, c = 0
.2

c = 0.2
After rounding, c = 0
.3

c = 0.3
After rounding, c = 0
.4

c = 0.4
After rounding, c = 0
.5

c = 0.5
After rounding, c = 1

Size of the vector 'array' = 5

array[0] = 0.1

array[1] = 0.2

array[2] = 0.3

array[3] = 0.4

array[4] = 0.5
Program ended with exit code: 0

1 Ответ

2 голосов
/ 21 апреля 2020

Вот как определяется std::round.

Вычисляет ближайшее целое число к аргументу arg (в формате с плавающей запятой), округляя значения на полпути от нуля, независимо от текущего режима округления.

Возможно, вы захотите взглянуть на std::floor и std::ceil, так как вы, похоже, ожидаете какое-то подобное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...