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, потому что запятая не является допустимым десятичным разделителем.