неправильное деление long на double C++

Занимаюсь изучением C++. Столкнулся с такой проблемой: имеется переменная типа long, и мне нужно вывести ее, поделив на 100.0, с сохранением дробной части. Работает такое деление не со всеми числами . Например с следующими числами возникают вопросы: 1111101, 2222202 и т.д. Приведу примеры выражений:

1'111'111 / 100.0 == 11'111.1 //пропала единица

1'111'101 / 100.0 == 11'111 //отсутствует дробная часть

2'345'678 / 100.0 == 23'456.8 //пропала цифра семь

Пожалуйста, помогите с решением данной проблемы и объясните причину такого поведения.

Добавил простой пример кода:

long num = 2'345'678;
std::cout << num / 100.0;

Ответы (1 шт):

Автор решения: Harry

Вывод на экран и само значение — это две большие разницы. По умолчанию выводится 6 значащих цифр. Этот параметр можно изменять, так что посмотрите на вывод вот такого фрагмента и убедитесь, что деление правильное :)

long num = 2'345'678;
std::cout << num / 100.0 << std::endl;
std::cout << std::setprecision(12);
std::cout << num / 100.0 << std::endl;
std::cout << std::setprecision(3);
std::cout << num / 100.0 << std::endl;
→ Ссылка