toDouble()

toDouble() извлекает число с плавающей точкой из строки String: "123fish" даст 123.0, а "fish123"0; точность зависит от платформы.

Полная статья

Описание

Метод toDouble() извлекает число с плавающей точкой из строки типа String. Строка должна начинаться с цифры — только в этом случае преобразование даст осмысленный результат. Как только метод встречает символ, который не может быть частью числа, он останавливается и возвращает всё, что успел разобрать.

Несколько примеров, чтобы лучше понять поведение:

  • "123.45"123.45
  • "123"123.00
  • "123fish"123.00 (всё после нецифрового символа игнорируется)
  • "fish123"0 (строка не начинается с цифры)
  • "123.456" → примерно 123.46 (из-за ограниченной точности)

Важно помнить: на большинстве плат Arduino тип double реализован так же, как float — 32-битное число одинарной точности. Это означает надёжную точность лишь в 6–7 значащих десятичных цифр. Если строка содержит больше цифр, результат будет округлён или усечён.

Синтаксис

myString.toDouble()

Параметры

myString: переменная типа String.

Возвращает

Число типа double, полученное из строки. Если строка не начинается с цифры и преобразование невозможно, метод возвращает 0.

Где применяется

  • Разбор данных, пришедших по Serial в виде текста: пользователь ввёл "3.14", нужно получить число для вычислений.
  • Чтение значений из файла на SD-карте, где числа хранятся как строки.
  • Парсинг ответов от GPS-модуля или другого устройства, передающего координаты текстом.
  • Обработка данных из веб-запросов или JSON-подобных форматов на платах с сетевыми возможностями.

Практические замечания

  • Точность ограничена. На большинстве плат Arduino double и float — одно и то же (32 бита). Не рассчитывайте на точность больше 6–7 цифр.
  • Строка должна начинаться с цифры. Пробелы, буквы или знак + в начале приведут к возврату 0. Если данные приходят с возможными пробелами, предварительно обрежьте строку методом trim().
  • Знак минус распознаётся. Строка "-12.5" корректно преобразуется в -12.5.
  • Возврат 0 неоднозначен. Метод вернёт 0 и для строки "0.0", и для строки "abc". Если нужно различать эти случаи, перед вызовом toDouble() проверьте, что первый символ строки — цифра или знак минус.
  • Разделитель — точка, не запятая. Строка "3,14" будет разобрана как 3.0, потому что запятая не является допустимым десятичным разделителем.