16

Как преобразовать строку в число в TypeScript?

15

Проблема с преобразованием строки в число в TypeScript

У меня есть строковое представление числа, и мне нужно преобразовать его в тип number в TypeScript. Как это можно сделать?

var numberString: string = "1234";
var numberValue: number = /* что мне делать со `numberString`? */;

Я хотел бы получить правильный способ выполнения этого преобразования, чтобы избежать ошибок и убедиться, что результатом будет именно тип number.

5 ответ(ов)

16

Способ сделать это на TypeScript выглядит следующим образом:

Number('1234') // 1234
Number('9BX9') // NaN

Это было обсуждено здесь: https://stackoverflow.com/a/23440948/2083492.

1

Для наших коллег, использующих Angular:

В шаблонах конструкции Number(x) и parseInt(x) вызывают ошибку, а +x не оказывает влияния. Правильными способами приведения типов будут x * 1 или x / 1.

0

Преобразование строки в число:

В 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);

Какой способ использовать?

  1. Используйте parseInt(), когда вам нужно преобразовать строку в целое число. Однако, обратите внимание, что тип данных все равно будет числом с плавающей запятой, так как все числовые значения в TS являются числами с плавающей запятой. Также используйте этот метод, когда необходимо указать основание системы счисления для разбора.
  2. Используйте parseFloat(), когда нужно преобразовать строку в число с плавающей запятой.
  3. Вы можете использовать оператор + перед строкой, чтобы преобразовать её в число с плавающей запятой. Преимущество этого метода в том, что синтаксис очень лаконичен.
0

Самый простой способ преобразовать строку в число — использовать +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.

0

Вы можете использовать один из следующих способов:

var str = '54';

var num = +str; // простой способ с использованием оператора +
var num = parseInt(str); // преобразование с помощью функции parseInt
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь