Как преобразовать строку в число в TypeScript?
Проблема с преобразованием строки в число в TypeScript
У меня есть строковое представление числа, и мне нужно преобразовать его в тип number
в TypeScript. Как это можно сделать?
var numberString: string = "1234";
var numberValue: number = /* что мне делать со `numberString`? */;
Я хотел бы получить правильный способ выполнения этого преобразования, чтобы избежать ошибок и убедиться, что результатом будет именно тип number
.
5 ответ(ов)
Способ сделать это на TypeScript выглядит следующим образом:
Number('1234') // 1234
Number('9BX9') // NaN
Это было обсуждено здесь: https://stackoverflow.com/a/23440948/2083492.
Для наших коллег, использующих Angular:
В шаблонах конструкции Number(x)
и parseInt(x)
вызывают ошибку, а +x
не оказывает влияния. Правильными способами приведения типов будут x * 1
или x / 1
.
Преобразование строки в число:
В TypeScript существуют различные способы преобразования строки в число:
parseInt()
: Эта функция принимает 2 аргумента: первый — строка для разбора, второй — основание системы счисления (например, 10 для десятичной и 2 для двоичной). Функция возвращает целое число; если первый символ не может быть преобразован в число, будет возвращеноNaN
.parseFloat()
: Принимает в качестве аргумента значение, которое мы хотим разобрать, и возвращает число с плавающей запятой. Если значение не может быть преобразовано в число, возвращаетсяNaN
.- Оператор
+
: При правильном использовании этот оператор может преобразовать строковое значение в число.
Примеры:
/* parseInt */
// Обратите внимание, что возвращается целое число, поэтому число округляется
console.log(parseInt('51.023124'));
// parseInt "отсекает" любую часть строки, которая не является числом
console.log(parseInt('5adfe1234'));
// Если строка начинается с некорректного символа, будет возвращено NaN
console.log(parseInt('z123'));
console.log('--------');
/* parseFloat */
// Разбирает строку в число, сохраняя точность
console.log(typeof parseFloat('1.12321423'));
// parseFloat "отсекает" любую часть строки, которая не является числом
console.log(parseFloat('5.5abc'));
console.log('--------');
/* + оператор */
let myString = '12345'
console.log(typeof +myString);
let myOtherString = '10ab'
// Оператор + не отсекает "нене числовую" часть строки и возвращает NaN
console.log(+myOtherString);
Какой способ использовать?
- Используйте
parseInt()
, когда вам нужно преобразовать строку в целое число. Однако, обратите внимание, что тип данных все равно будет числом с плавающей запятой, так как все числовые значения в TS являются числами с плавающей запятой. Также используйте этот метод, когда необходимо указать основание системы счисления для разбора. - Используйте
parseFloat()
, когда нужно преобразовать строку в число с плавающей запятой. - Вы можете использовать оператор
+
перед строкой, чтобы преобразовать её в число с плавающей запятой. Преимущество этого метода в том, что синтаксис очень лаконичен.
Самый простой способ преобразовать строку в число — использовать +strVal
или Number(strVal)
.
Вот примеры:
let strVal1 = "123.5"
let strVal2 = "One"
let val1a = +strVal1
let val1b = Number(strVal1)
let val1c = parseFloat(strVal1)
let val1d = parseInt(strVal1)
let val1e = +strVal1 - parseInt(strVal1)
let val2a = +strVal2
console.log("val1a->", val1a) // 123.5
console.log("val1b->", val1b) // 123.5
console.log("val1c->", val1c) // 123.5
console.log("val1d->", val1d) // 123
console.log("val1e->", val1e) // 0.5
console.log("val2a->", val2a) // NaN
В этом примере val1a
, val1b
, и val1c
корректно преобразуют строку "123.5" в число 123.5, в то время как val2a
возвращает NaN
, так как строка "One" не может быть преобразована в число. Метод parseInt
возвращает целое число 123, а parseFloat
возвращает 123.5. Разница между ними (val1e
) дает 0.5.
Вы можете использовать один из следующих способов:
var str = '54';
var num = +str; // простой способ с использованием оператора +
var num = parseInt(str); // преобразование с помощью функции parseInt
Где найти документацию по форматированию даты в JavaScript?
В чем разница между String.slice и String.substring?
Проверка соответствия строки регулярному выражению в JS
Существует ли ссылка на "последнюю" библиотеку jQuery в Google APIs?
Как создать диалог с кнопками "Ок" и "Отмена"