Создть число с плавающей запятой, используя целые числа
Я хочу создать число с плавающей запятой, имеющее только одну десятичную точку. У меня есть отдельные целые числа для обеих сторон. Пример:
int n1 = 8;
int n2 = 2;
Я хочу сделать 8.2 значением с плавающей запятой, используя отдельные целые числа. Пожалуйста, дайте мне решение.
@user119o, 👍0
2 ответа
Лучший ответ:
Кажется слишком простым:
float x = n1 + n2 * 0.1;
Есть ли подвох?
Изменить: метод, предложенный Мишелем Кейзерсом, а именно
float x = n1 + n2 / 10.0;
(я удалил лишние приведения) может быть немного точнее, но занимает
дольше вычислять, поскольку деление происходит значительно медленнее, чем
умножение на Уно. Вычисление n2/10.0
всегда дает
правильно округленный результат, а именно число с плавающей запятой, которое лучше всего аппроксимирует
точный математический результат. С другой стороны, n2*0.1
включает в себя два
операции округления: одна во время компиляции, в представлении 0,1
(что не является точным числом с плавающей запятой), другой во время выполнения, который округляет
результат умножения. Если n2
находится между 0 и 8, в конечном итоге вы получите
в любом случае получить правильно округленный результат, как и в случае с n2/10.0
.
Однако если n2
равен 9, то
n2*0.1
дает 0,900000035762786865234375 (ошибка ≈ 3.6e-8)n2/10.0
дает 0,89999997615814208984375 (ошибка ≈ -2.4e-8)
В первом случае ошибка округления в 1,5 раза больше, чем во втором.
float x = (float) n1 + (float) (n2 / 10.0);
Это работает, только если значение n2 состоит из 1 цифры. В противном случае следующие действия уменьшают его до тех пор, пока n2 не станет ниже 1,0:
float x = (float) n1;
float f2 = (float) n2;
while (f2 >= 1.0)
{
f2 /= 10.0;
}
x = n1 + f2;
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
- Объявленная переменная внутри void setup не видится в void loop
- Хранить переменную?
- Сбросить переменную каждую 1 секунду на Arduino.