Как сделать строку числом javascript
Перейти к содержимому

Как сделать строку числом javascript

  • автор:

Как перевести число в строку в Javascript?

Чтобы преобразовать число в строку необходимо вызвать метод toString() у числа.

const number = 5555; const notNumber = number.toString(); 

теперь в notNumber находит не число, а строка. Проверить можно с помощью typeof

typeof notNumber; // 'string' 

Также это сработает с отрицательными числами

const negative = -150; const notNegativeNumber = negative.toString(); console.log(notNegativeNumber); // => '-150' - теперь это строка. 

Из этого числа мы можем взять символ.

const firstChar = notNegativeNumber[0]; console.log(firstChar); // => '-' 

Преобразование типов

Функция Number() преобразует в тип Number, String() в тип String, Boolean() в тип Boolean.

Типы данных в JavaScript

В JavaScript существует 5 типов данных, которые могут содержать значения:

Есть 3 типа объектов:

И 2 типа данных, которые не могут содержать значения:

Оператор typeof

Чтобы определить тип переменной JavaScript, используется оператор typeof.

 typeof "John" // Возвращает "string" typeof 3.14 // Возвращает "number" typeof NaN // Возвращает "number" typeof false // Возвращает "boolean" typeof [1,2,3,4] // Возвращает "object" typeof // Возвращает "object" typeof new Date() // Возвращает "object" typeof function () <> // Возвращает "function" typeof myCar // Возвращает "undefined" * typeof null // Возвращает "object" 
  • У NaN тип number
  • У массива тип object
  • У даты тип object
  • У null тип object
  • У неопределенной переменной тип undefined *
  • У переменной, которой не присвоено значение, тоже тип undefined *

Нельзя при помощи оператора typeof определить, является ли объект JavaScript массивом (или датой).

Оператор typeof это не переменная. Это оператор. У операторов ( + — * / ) нет типов. Однако оператор typeof всегда возвращает строку (содержащую тип операнда).

Свойство constructor

Свойство constructor возвращает функцию-конструктор у всех переменных JavaScript.

 "John".constructor // Возвращает функцию String() <[машинный код]>(3.14).constructor // Возвращает функцию Number() <[машинный код]>false.constructor // Возвращает функцию Boolean() <[машинный код]>[1,2,3,4].constructor // Возвращает функцию Array() <[машинный код]>.constructor // Возвращает функцию Object() <[машинный код]>new Date().constructor // Возвращает функцию Date() <[машинный код]>function () <>.constructor // Возвращает функцию Function()

Вы можете проверить свойство constructor, чтобы определить, является ли объект массивом (содержит слово «Array»):

 function isArray(myArray) < return myArray.constructor.toString().indexOf("Array") >-1; > 

Или еще проще, вы можете проверить, является ли объект функцией Array:

 function isArray(myArray)

Аналогичным образом можно проверить является ли переменная объектом Date.

Преобразование типов в JavaScript

Переменные JavaScript могут быть преобразованы в новые переменные и другие типы данных:

  • при помощи функции JavaScript
  • автоматически самим JavaScript

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

Глобальный метод String() позволяет преобразовывать числа в строки.

Его можно использовать с любыми видами чисел — константами, переменными или выражениями:

 String(x) // преобразовывает строку числовую переменную x String(123) // преобразовывает строку константу 123 String(100 + 23) // преобразовывает строку результат выражения 

Метод toString() объекта Number делает то же самое.

 x.toString() (123).toString() (100 + 23).toString() 

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования чисел в строки:

Метод Описание
toExponential() Возвращает строку с округленным числом, записанным в экспоненциальной нотации.
toFixed() Возвращает строку с числом, записанным с заданным количеством цифр после десятичной точки.
toPrecision() Возвращает строку с числом заданной длины.

Преобразование логических значений (тип Boolean) в строку

Глобальный метод String() позволяет преобразовывать логические значения в строки.

 String(false) // возвращает "false" String(true) // возвращает "true" 

Метод toString() объекта Boolean делает то же самое.

 false.toString() // возвращает "false" true.toString() // возвращает "true" 

Преобразование даты (тип Date) в строку

Глобальный метод String() позволяет преобразовывать дату (тип Date) в строку.

 String(Date()) 

Метод toString() объекта Date делает то же самое.

 Date().toString() 

В главе Методы объекта Date вы найдете другие методы, которые можно использовать для преобразования даты в строку:

Метод Описание
getFullYear() Получить год в формате четырех цифр (гггг)
getMonth() Получить номер месяца (0-11)
getDate() Получить число месяца (1-31)
getHours() Получить час (0-23)
getMinutes() Получить минуты (0-59)
getSeconds() Получить секунды (0-59)
getMilliseconds() Получить миллисекунды (0-999)
getTime() Получить время (количество миллисекунд, прошедших с 1 января 1970)
getDay() Получить номер дня недели (0-6)

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

Глобальный метод Number() позволяет преобразовывать строки в числа.

Строки, содержащие числа (как «3.14»), преобразовываются в числа (как 3.14). Пустые строки преобразовываются в 0. Все остальные строки преобразовываются в NaN (Не число).

 Number("3.14") // возвращает 3.14 Number(" ") // возвращает 0 Number("") // возвращает 0 Number("99 88") // возвращает NaN 

В главе Методы объекта Number вы найдете другие методы, которые можно использовать для преобразования строк в числа:

Метод Описание
parseFloat() Парсит строку и возвращает число с плавающей точкой.
parseInt() Парсит строку и возвращает целое число.

Унарный оператор +

Унарный оператор + также можно использовать для преобразования переменных в числовой тип:

 var y = "5"; // y строка var x = + y; // x число 

Если переменная не может быть преобразована, то она все равно станет числом, но со значением NaN (Не число):

 var y = "John"; // y строка var x = + y; // x число (NaN) 

Преобразование логических значений (тип Boolean) в число

Глобальный метод Number() позволяет преобразовывать логические значения в числа.

 Number(false) // возвращает 0 Number(true) // возвращает 1 

Преобразование даты (тип Date) в число

Глобальный метод Number() позволяет преобразовывать значения даты (тип Date) в числа.

 d = new Date(); Number(d) // возвращает 1404568027739 

Метод getTime() объекта Date делает то же самое.

 d = new Date(); d.getTime() // возвращает 1404568027739 

Автоматическое преобразование типов

Когда JavaScript приходится оперировать с «неправильным» типом данных, интерпретатор попытается преобразовать тип этого значения в «правильный».

Результат получается не всегда таким, как вы ожидаете:

 5 + null // возвращает 5, потому что null преобразуется в 0 "5" + null // возвращает "5null", потому что null преобразуется в "null" "5" + 2 // возвращает "52", потому что 2 преобразуется в "2" "5" - 2 // возвращает 3, потому что "5" преобразуется в 5 "5" * "2" // возвращает 10, потому что "5" и "2" преобразуется в 5 и 2 

Автоматическое преобразование строк

JavaScript автоматически вызывает метод переменной toString(), когда вы пытаетесь «вывести» объект или переменную:

 document.getElementById("demo").innerHTML = myVar; // if myVar = // toString преобразует в "[object Object]" // if myVar = [1,2,3,4] // toString преобразует в "1,2,3,4" // if myVar = new Date() // toString преобразует в "Fri Jul 18 2014 09:08:55 GMT+0200" 

Числа и логические значения также преобразуются, но это не так заметно:

 // if myVar = 123 // toString преобразует в "123" // if myVar = true // toString преобразует в "true" // if myVar = false // toString преобразует в "false" 

Таблица преобразования типов JavaScript

В следующей таблице показаны результаты преобразования различных значений JavaScript в типы Number, String и Boolean:

Оригинальное значение Преобразованное в Number Преобразованное в String Преобразованное в Boolean
false 0 «false» false
true 1 «true» true
0 0 «0» false
1 1 «1» true
«0» 0 «0» true
«000» 0 «000» true
«1» 1 «1» true
NaN NaN «NaN» false
Infinity Infinity «Infinity» true
-Infinity -Infinity «-Infinity» true
«» 0 «» false
«20» 20 «20» true
«twenty» NaN «twenty» true
[] 0 «» true
[20] 20 «20» true
[10,20] NaN «10,20» true
[«twenty»] NaN «twenty» true
[«ten»,»twenty»] NaN «ten,twenty» true
function()<> NaN «function()<>« true
NaN «[object Object]» true
null 0 «null» false
undefined NaN «undefined» false

Значения в кавычках показывают строковые значения.

Красным цветом выделены значения, которые не всегда ожидаемы.

Преобразование типов данных в JavaScript

Поскольку в JavaScript нет строгой типизации данных, как в С++, например, или в ActionScript, который работает во Flash на основе той же спецификации ECMAScript, что и JavaScript. Поэтому в JS любая переменная в любой момент времени может получить новое значение, которое может отличаться не только по сути, но и по типу данных.

В этой статье мы рассмотрим автоматическое (неявное) преобразование типов данных, которое интерпретатор JavaScript производит в арифметических операциях и операциях сравнения, а также наиболее часто используемые явные преобразования строк в числа, чисел в строки и в булевы (логические) значения.

Автоматическое преобразование типов данных в JavaScript

JavaScript может приводить примитивные значения к различным типам данных в зависимости от контекста.

Предположим, что у нас есть запись, предполагающая сравнение числа и строки:

Нестрогое равенство
JavaScript
2 == ‘2’ ; // true

Тогда строка ‘2’ будет преобразована в число, а 2 действительно равно 2 , и это истина ( true ).

При использовании строгого равенства мы, напротив, получим false , т.к. JS оценивает в этом случае и тип данных, а не только значение:

Строгое равенство
JavaScript
2 === ‘2’ ; // false

Используем операцию сложения числа со строкой (часто бывает при вводе данных в полях формы или в методе prompt() ):

JavaScript

В этом случае число 16 будет преобразовано в строку «16» , и данная запись вернет «161» , а не предполагаемые 17. JavaScript здесь просто выполняет объединение строк. Такая операция называется конкатенация от англ. concatenate — объединять.

Рассмотрим, что будет при вычитании из числа строки:

JavaScript

Операция вернет 0, потому что произойдет автоматическое преобразование строки в число.

Если же мы попытаемся вычесть из числа строку из символов:

JavaScript
12 — ‘b’ ; // NaN — Not a number

то получим в результате NaN, поскольку происходит вычитание строки с нечисловым контекстом из числа, что не может быть выполнено корректно и переведено в число.

Если используются логические операции и выражения, то переменные или их значения вычисляются до их истинных или ложных значений. Значения, возвращающие false , включают в себя: 0 , null , undefined , » (пустая строка), false , NaN . Все остальные значения возвращают true.

Допустим, нужно сделать выбор из следующих значений:

JavaScript
0 || undefined || null || 1 //1

Результатом этой записи будет 1 . Интерпретатор JavaScript определит все значения, которые возвращают false, и в итоге вернет единственное истинное значение — 1. Если последовательность будет иной, вернется первое значение, соответствующее истине, т.е. true :

Логические выражения
JavaScript
0 || 3 || 1 || undefined || null //3

Чтобы убедиться, что в результате неких операций у вас в коде будут необходимые типы, нужно привести каждое значение к нужному вам типу явно или проверить тип оператором typeof .

Для явного преобразования типов данных можно использовать ряд способов, которые мы рассмотрим ниже.

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

Чаще всего приходится преобразовывать строки в числа. Происходит это потому, что все, что вводит пользователь в формах, например, или в диалоговом окне prompt() — это строка по типу данных. Но значение этой строки может быть числовым. И операции, которые производятся со значением переменной, будут относится к арифметическим:

  • сложение
  • вычитание
  • умножение
  • деление
  • остаток от деления

При использовании последних 4 операций вступает в действие механизм автоматического преобразования типов данных, а вот в случае со сложением срабатывает конкатенациясклеивание строк.

Рассмотрим пример: в поля формы нужно ввести числа и получить результат при клике на кнопку «Сумма».

Сумма чисел

Должно быть, вы заметили, что числовые значения из 2-х полей соединились и , например, при сложении чисел 12 и 65 получилось 1265, а не 77, как ожидалось. Все это произошло потому, что оператор сложения находился между строками «12» и «65». Он и соединил эти 2 значения. И получилось «1265» — вполне ожидаемое с точки зрения JavaScript. Самое интересное, что, если мы рассмотрим другие операции, то арифметические действия с ними будут происходить в JavaScript по правилам математики.

Действия над числами

Конструктор Number()

Способ 2. Методы parseInt() и parseFloat()

Метод parseInt() не только преобразует строку в число, но еще и отделяет целую часть от дробной. Метод parseFloat() преобразует строку в число с плавающей точкой, или дробной частью. Кроме того, эти методы отделяют часть строки от числа, если строка начинается с цифр. Если строка начинается с букв, то оба метода возвращают NaN (Not a Number).

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

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

Метод toFixed() — не работает,
toString() или String(var) — записывают результат в экспоненциальной форме.

Вот такое число, 123434343434343434345410 , как преобразовать в строку ?

И как выполнить преобразование строки в число, чтобы не было экспоненциальной формы записи ?

parseFloat(strDigitsOnly);

такое преобразование переводит число в экспоненциальную форму
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Как преобразовать большое число в строку
Делаю такое преобраование char szbuff; double X=3292373930; sprintf(szbuff, "%g", X); string.

Как преобразовать большое число в строку через stringstream и ограничить знаки после точки
опять возникла проблема которая была недавно но с другим методом нужно преобразовать большое.

Как преобразовать большое число int64 в VARIANT чтобы затем его вывести на экран
Работаю с WMI,получаю размер диска. Тип данных int64 (согласно докам MSDN), после операции Get.

Очень большое число
Народ, подскажите как сделать большую целочисленную переменную нестандартного размера. Например, на.

Эксперт JS

6485 / 3896 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781

1 2 3 4 5 6 7 8 9 10 11 12 13
DOCTYPE html> html> head> meta charset="utf-8"> head> body> script> let str = "123434343434343434345410"; let num = BigInt(str); console.log(num); script> body> html>

В свежем Хроме и Опере работать будет, в MS Edge работать не будет.
dev — investigator

Эксперт JSЭксперт HTML/CSS

2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696

amr-now, приветствую.
masli, если нужно просто вывести это число, нет необходимости преобразовывать тип, можно оставить просто строку. Другое дело если нужно привести к удобочитаемому виду. Как вариант —

(1.2343434343434343e+23).toPrecision(100).split('.')[0]

Если же число нужно для расчета — нет разницы в какой форме оно участвует в уравнении.

Эксперт JS

6485 / 3896 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781

Qwerty_Wasd, здравствуйте!

Чудес не бывает. toPrecision(100) не увеличивает точноcть. Как parseFloat() оставит примерно 16 значащих цифр, так точными и останутся эти 16 цифр.

Так что выбор такой — или просто использовать строки в качестве длинных ID
или использовать штатный или нештатный (из внешней библиотеки) тип BigInt, если нам приспичило осуществлять арифметические операции с длинным целым числом.

dev — investigator

Эксперт JSЭксперт HTML/CSS

2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696

amr-now, toPrecision использован по назначению — я и собирался максимально поддержать значащие числа, остаток в нолях отсечь. А вот с parseFloat Вы что-то попутали. Он никоим образом не приведет число к тому виду, как это делает toPrecision. И при чем здесь точность числа? Я надеюсь Вы не собираетесь нам тут устроить вайн на тему IEEE_754-2008 ?

ЦитатаСообщение от amr-now Посмотреть сообщение

Так что выбор такой — или просто использовать строки в качестве длинных ID
или использовать штатный или нештатный (из внешней библиотеки) тип BigInt

замечу — с Вашей колокольни. Надо ли напоминать, что выбор средства должен быть релевантен задаче?
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

вот собственно код, в котором нужно преобразование.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*выбираем из строки только числа, * перед тем как вернуть в точку вызова результат, * проверяем, что результат - имеет тип данных number; * parseInt() - преобразование строки в число; * num - число*/ function parseStrAndConverseToNumber(str) { var strDigitsOnly = str.toString().replace(/\D+/g, ''); var num = BigInt(strDigitsOnly); if (typeof(num) === "bigint") { return num; } else { throw new TypeError("This is not number!"); } }

Но как я понимаю, на старых версиях браузеров это работать не будет.
У меня среда разработки может выставить максимально ESMAScript6, но даже так, компилятор не может проверить эту функцию, она для него незнакома

Я могу только увидеть запустив код в браузере.

С какой версии ESMAScript * введена функция и есть ли решение для IE начиная с 9 x.
В IE 11.x такой код не заработает .

После преобразования, это число пишется в MYSQl (Через backend-часть приложения).

Добавлено через 4 минуты

var num = (strDigitsOnly).toPrecision(100).split('.')[0];

такой вариант то же не пройдет, chrome указывает что ‘toPrecision()’ — is not function .
dev — investigator

Эксперт JSЭксперт HTML/CSS

2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696

ЦитатаСообщение от masli Посмотреть сообщение

такой вариант то же не пройдет
потому что toPrecision() метод интанса Number, а не строки
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

строку тоже пытался преобразовать

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
/*выбираем из строки только числа, * перед тем как вернуть в точку вызова результат, * проверяем, что результат - имеет тип данных number; * parseInt() - преобразование строки в число; * num - число*/ function parseStrAndConverseToNumber(str) { var strDigitsOnly = str.toString().replace(/\D+/g, ''); // var num = BigInt(strDigitsOnly); var num = str.toPrecision(100).split('.')[0]; if (typeof(num) === "bigint") { return num; } else { throw new TypeError("This is not number!"); } } var thousandSeparator = function (number) { var parts = (number + ''); var main = parts[0]; var len = main.length; var output = ''; var i = len - 1; while (i >= 0) { output = main.charAt(i) + output; if ((len - i) % 3 === 0 && i > 0) { output = ' ' + output; } --i; } if (parts.length > 1) { output += '.' + parts[1]; } return output; }; /* Начало --- Получение из строки только чисел и преобразовние из в тип * данных - number*/ // var numberStr = " 10#434. @@@@++===()&(?23.23dfd2,25fg 4 "; var numberStr = " 123 43434 343 43434 3434 5410 "; //var numberStr = ""; $('.thousand').html(parseStrAndConverseToNumber(numberStr)).css({ 'color': 'blue', 'font-weight': 'bold' });

52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

Мне то в начале нужно преобразовать строку, убрать разделители и получить число, дальше положить число в JSON.

Число будет положено в экспоненциальном формате, мне это не нужно.

Когда число получаю из базы, его нужно преобразовать в строку, чтобы разделить на разряды и вывести в ячейке таблицы, на странице клиента.

Большое число из базы , в метод приходит вот в таком виде

Как его преобразовать в строку в удобочитаемый вид , без потери точности ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *