Преобразование из Float в Int дает странные результаты. Что я делаю не так?

Итак, я пытаюсь получить данные GPS с помощью GPS-модуля Neo 6M (это то, что закрыто квадратом из соображений конфиденциальности) и обработать их, сложив/умножив, чтобы получить большие целые числа, представляющие данные GPS. Это использование Arduino nano. Когда я пытаюсь преобразовать числа с плавающей запятой в целые числа, я получаю совершенно другие числа. 1242895 превращается в -2289, а 611194 превращается в 21370. Я столько всего перепробовал, но не понимаю, что происходит. Это связано с указыванием? Прошло некоторое время с тех пор, как я узнал об указателях в своем классе C++. X и Y инициализируются как глобальные переменные типа int.

с плавающей запятой

, 👍2

Обсуждение

Пожалуйста, скопируйте и вставьте сюда свой код вместо публикации скриншота. Изображение какого-то текста — это самая бесполезная вещь в Интернете. Его нельзя копировать и редактировать. Это трудно читать. Программы чтения с экрана не могут коснуться его. Пожалуйста, в будущем просто скопируйте и вставьте сам текст., @Delta_G

Прикрыли из соображений конфиденциальности? Вы делитесь теми же данными ниже, только с тривиальным преобразованием., @Edgar Bonet


1 ответ


6

На плате Arduino с процессором 328 INT хранится как 2-байтовое значение, поэтому максимальное число равно 32 767.

Вы хотите использовать LONG, представляющий собой 4-байтовое число с максимальным значением 2 147 483 647.

Когда используемая вами переменная недостаточно велика, число переворачивается, поэтому в итоге вы получаете отрицательное число.

,

Я исправил заглавные буквы в вашем посте, но в будущем, пожалуйста, старайтесь составлять предложения на английском языке. Они начинаются с заглавной буквы. Это не игровой чат, где вы просто вводите все строчными буквами., @Nick Gammon

@NickGammon Вау. Большое спасибо., @Chad G