Я пытался использовать формулу ниже в C ++. У меня есть обе переменные, объявленные как целые числа, и я ожидаю, что они округляются вверх, но они, кажется, округляются вниз. Я посмотрел на это, но не могу найти, что не так. Любая помощь будет принята с благодарностью.
int user_degrees_latitude, user_degrees_longitude;
const int lat_const=(-90)
const int long_const=(-180)
sector_latitude = (user_degrees_latitude - lat_const) / (10);
sector_longitude = (user_degrees_longitude - long_const) / (10);
Ответ должен быть 13 для sector_latitude и 11 для sector_longitude, но каждый компьютер округляет до 12 и 10 соответственно.
В C ++ целые числа не округляются. Вместо этого целочисленное деление усекает (читай: всегда округляет до нуля) остаток от деления.
Если вы хотите получить эффект округления для положительный целые числа, вы могли бы написать:
sector_latitude = static_cast<int>(((user_degrees_latitude - lat_const) / (10.0)) + 0.5);
При добавлении 0,5 усечение приводит к эффекту округления. Обратите внимание на добавление .0
на 10.0
заставить деление с плавающей запятой перед сложением.
Я также предположил, что sector_latitude
был инт с кастингом.
Целочисленное деление в C ++ всегда округляет до нуля. Используйте деление с плавающей точкой, чтобы получить «точные» результаты и использовать std::round
округлить по обычным правилам:
sector_latitude = static_cast</*type of sector_latitude*/>( std::round( (user_degrees_latitude - lat_const) / 10.0 ));
«10,0» ( double
) вместо «10» ( int
) указывает компилятору использовать арифметику с плавающей точкой. Он всегда выбирает вычисление с плавающей запятой над целочисленным, если значение с плавающей запятой, такое как double
вовлечен.