В Google Apps Script, как и в любом другом языке программирования, часто возникает необходимость преобразовать текстовые данные в числовые. Это может быть нужно для выполнения математических операций, сравнения значений, записи данных в электронные таблицы или взаимодействия с API, которые ожидают числовые аргументы.
Почему необходимо преобразование текста в число?
Представьте ситуацию, когда вы считываете данные из Google Sheets, где числовые значения хранятся в текстовом формате. Без преобразования вы не сможете выполнить над ними математические операции, например, рассчитать среднее значение рекламного бюджета или конверсию. Другой пример – получение данных о количестве показов из внешнего API в формате JSON, где значения представлены строками. Для последующей аналитики и расчетов эти строки необходимо преобразовать в числа.
Обзор основных функций для преобразования
В Google Apps Script существует несколько способов преобразовать текст в число:
parseInt(): Преобразует строку в целое число.
parseFloat(): Преобразует строку в число с плавающей точкой.
Унарный плюс (+): Преобразует строку в число (может быть как целым, так и с плавающей точкой). Это наиболее лаконичный способ.
Использование `parseInt()` для преобразования целых чисел
parseInt() – функция, предназначенная для преобразования строки в целое число. Важно помнить, что она прекращает разбор строки, как только встречает символ, который не может быть интерпретирован как цифра, знак или экспонента.
Синтаксис и параметры функции `parseInt()`
Синтаксис функции parseInt() выглядит следующим образом:
parseInt(string, radix);
string: Строка, которую необходимо преобразовать.
radix: (Необязательный) Основание системы счисления (от 2 до 36). Если не указано или равно 0, JavaScript предполагает основание 10, если строка начинается с "0x", то основание 16. Если строка начинается с "0", то основание зависит от реализации, но не рекомендуется полагаться на такое поведение и всегда указывать основание явно.
Примеры использования `parseInt()` с разными системами счисления (основаниями)
/**
* Преобразует строку в целое число, используя parseInt() с разными основаниями.
*/
function parseIntExamples() {
Logger.log(parseInt("10", 10)); // 10 (десятичная система)
Logger.log(parseInt("10", 2)); // 2 (двоичная система)
Logger.log(parseInt("A", 16)); // 10 (шестнадцатеричная система)
Logger.log(parseInt("0xA")); // 10 (шестнадцатеричная система, если не указано основание и строка начинается с '0x')
Logger.log(parseInt("229", 8)); // NaN (некорректное число в восьмеричной системе)
}
Обработка ошибок и некорректных входных данных с `parseInt()`
Если parseInt() не может преобразовать строку в число, она возвращает NaN (Not a Number). Важно проверять результат на NaN с помощью функции isNaN().
/**
* Обрабатывает ошибки и некорректные входные данные с parseInt().
*/
function parseIntErrorHandling() {
let str = "Hello";
let num = parseInt(str);
if (isNaN(num)) {
Logger.log("Не удалось преобразовать строку в число.");
} else {
Logger.log(num);
}
}
Использование `parseFloat()` для преобразования чисел с плавающей точкой
Функция parseFloat() аналогична parseInt(), но предназначена для преобразования строк в числа с плавающей точкой.
Синтаксис и параметры функции `parseFloat()`
Синтаксис функции parseFloat() выглядит следующим образом:
parseFloat(string);
string: Строка, которую необходимо преобразовать.
Примеры использования `parseFloat()` для преобразования десятичных чисел
/**
* Преобразует строку в число с плавающей точкой, используя parseFloat().
*/
function parseFloatExamples() {
Logger.log(parseFloat("3.14")); // 3.14
Logger.log(parseFloat("3.14abc")); // 3.14 (прекращает разбор при встрече с нечисловым символом)
Logger.log(parseFloat(".14")); // 0.14
Logger.log(parseFloat(" ")); // NaN
}Обработка ошибок и некорректных входных данных с `parseFloat()`
Как и parseInt(), parseFloat() возвращает NaN в случае ошибки. Рекомендуется использовать isNaN() для проверки результата.
/**
* Обрабатывает ошибки и некорректные входные данные с parseFloat().
*/
function parseFloatErrorHandling() {
let str = "Invalid Number";
let num = parseFloat(str);
if (isNaN(num)) {
Logger.log("Не удалось преобразовать строку в число с плавающей точкой.");
} else {
Logger.log(num);
}
}
Использование оператора унарный плюс (+) для преобразования
Унарный плюс – это оператор, который может быть использован для преобразования строки в число. Это более краткий способ по сравнению с parseInt() и parseFloat(). Важно понимать его поведение и ограничения.
Принцип работы унарного плюса
Унарный плюс пытается преобразовать операнд в число. Если операнд – строка, он пытается интерпретировать ее как число. Если это удается, возвращается числовое значение. Если нет, возвращается NaN.
Преимущества и ограничения использования унарного плюса
Преимущества: Краткость и лаконичность кода.
Ограничения: Менее явное преобразование, сложнее контролировать процесс. Не подходит для преобразования чисел с указанием основания (в отличие от parseInt()).
Примеры использования унарного плюса в Google Apps Script
/**
* Преобразует строку в число, используя унарный плюс.
*/
function unaryPlusExamples() {
Logger.log(+"10"); // 10
Logger.log(+"3.14"); // 3.14
Logger.log(+"0x10"); // 16 (шестнадцатеричное число)
Logger.log(+"Hello"); // NaN
}
Продвинутые техники и обработка особых случаев
Преобразование текста, содержащего валютные символы и другие знаки
Для преобразования строк, содержащих валютные символы или другие нечисловые знаки, необходимо предварительно очистить строку. Например, можно использовать replace() для удаления этих символов.
/**
* Преобразует строку, содержащую валютный символ, в число.
*/
function convertCurrencyString(str) {
let cleanStr = str.replace("$", "").replace(",", ""); // Удаляем символ доллара и запятые
let num = parseFloat(cleanStr);
if (isNaN(num)) {
return NaN;
} else {
return num;
}
}
Работа с локализованными числами (разделители целой и дробной части)
В разных странах используются разные разделители целой и дробной части (точка или запятая). При работе с локализованными числами необходимо учитывать это и заменять разделители перед преобразованием.
/**
* Преобразует локализованное число в число с плавающей точкой.
* Предполагает, что в качестве разделителя целой и дробной части используется запятая.
*/
function parseLocalizedFloat(str) {
let normalizedStr = str.replace(",", "."); // Заменяем запятую на точку
return parseFloat(normalizedStr);
}
Преобразование больших чисел и чисел в экспоненциальной форме
parseFloat() корректно обрабатывает числа в экспоненциальной форме. Если вам необходимо работать с очень большими целыми числами, которые могут превышать максимальное безопасное целое число JavaScript (Number.MAX_SAFE_INTEGER), следует использовать библиотеки для работы с большими числами, такие как BigInt (если доступно в вашей среде выполнения Apps Script) или сторонние библиотеки.
Сравнение производительности различных методов преобразования
В большинстве случаев разница в производительности между parseInt(), parseFloat() и унарным плюсом будет незначительной. Однако, если вам необходимо выполнять массовое преобразование данных, рекомендуется провести тестирование, чтобы выбрать наиболее быстрый метод для вашего конкретного случая. Унарный плюс, как правило, немного быстрее, но его использование может снизить читаемость кода.