Как выглядит функция преобразования текста в вещественное число в языке javascript
Перейти к содержимому

Как выглядит функция преобразования текста в вещественное число в языке javascript

  • автор:

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

Чаще всего операторы и функции автоматически приводят переданные им значения к нужному типу.

Например, alert автоматически преобразует любое значение к строке. Математические операторы преобразуют значения к числам.

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

В этой главе мы не касаемся объектов. Сначала мы разберём преобразование примитивных значений.

Мы разберём преобразование объектов позже, в главе Преобразование объектов в примитивы.

Строковое преобразование

Строковое преобразование происходит, когда требуется представление чего-либо в виде строки.

Например, alert(value) преобразует значение к строке.

Также мы можем использовать функцию String(value) , чтобы преобразовать значение к строке:

Преобразование происходит очевидным образом. false становится "false" , null становится "null" и т.п.

Численное преобразование

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

Например, когда операция деления / применяется не к числу:

Мы можем использовать функцию Number(value) , чтобы явно преобразовать value к числу:

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

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

Правила численного преобразования:

Значение Преобразуется в…
undefined NaN
null 0
true / false 1 / 0
string Пробельные символы (пробелы, знаки табуляции \t , знаки новой строки \n и т. п.) по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN .

Учтите, что null и undefined ведут себя по-разному. Так, null становится нулём, тогда как undefined приводится к NaN .

Большинство математических операторов также производит данное преобразование, как мы увидим в следующей главе.

Логическое преобразование

Логическое преобразование самое простое.

Происходит в логических операциях (позже мы познакомимся с условными проверками и подобными конструкциями), но также может быть выполнено явно с помощью функции Boolean(value) .

  • Значения, которые интуитивно «пустые», вроде 0 , пустой строки, null , undefined и NaN , становятся false .
  • Все остальные значения становятся true .

Некоторые языки (к примеру, PHP) воспринимают строку "0" как false . Но в JavaScript, если строка не пустая, то она всегда true .

Итого

Существует 3 наиболее широко используемых преобразования: строковое, численное и логическое.

Строковое – Происходит, когда нам нужно что-то вывести. Может быть вызвано с помощью String(value) . Для примитивных значений работает очевидным образом.

Численное – Происходит в математических операциях. Может быть вызвано с помощью Number(value) .

Преобразование подчиняется правилам:

Значение Становится…
undefined NaN
null 0
true / false 1 / 0
string Пробельные символы по краям обрезаются. Далее, если остаётся пустая строка, то получаем 0 , иначе из непустой строки «считывается» число. При ошибке результат NaN .

Логическое – Происходит в логических операциях. Может быть вызвано с помощью Boolean(value) .

Значение Становится…
0 , null , undefined , NaN , "" false
любое другое значение true

Большую часть из этих правил легко понять и запомнить. Особые случаи, в которых часто допускаются ошибки:

  • undefined при численном преобразовании становится NaN , не 0 .
  • "0" и строки из одних пробелов типа " " при логическом преобразовании всегда true .

В этой главе мы не говорили об объектах. Мы вернёмся к ним позже, в главе Преобразование объектов в примитивы, посвящённой только объектам, сразу после того, как узнаем больше про основы JavaScript.

7 ways to convert a String to Number in JavaScript

parseInt() parses a string and returns a whole number. Spaces are allowed. Only the first number is returned.
This method has a limitation though. If you parse the decimal number, it will be rounded off to the nearest integer value and that value is converted to string. One might need to use parseFloat() method for literal conversion.

Exit fullscreen mode

2. Using Number()

Number() can be used to convert JavaScript variables to numbers. We can use it to convert the string too number.
If the value cannot be converted to a number, NaN is returned.

Exit fullscreen mode

3. Using Unary Operator (+)

The unary plus operator ( + ) precedes its operand and evaluates to its operand but attempts to convert it into a number, if it isn’t already.

Exit fullscreen mode

4. Using parseFloat()

parseFloat() parses a string and returns a number. Spaces are allowed. Only the first number is returned.

Exit fullscreen mode

5. Using Math.floor()

The Math.floor() function returns the largest integer less than or equal to a given number. This can be little tricky with decimal numbers since it will return the value of the nearest integer as Number.

Exit fullscreen mode

6. Multiply with number

Multiplying the string value with the 1 which won’t change the value and also it will be converted to number by default.

Exit fullscreen mode

7. Double tilde (

We can use the double tilde operator to convert the string to number.

Exit fullscreen mode

Here is the comparison of the ways mentioned performance wise. Comment below if you know more methods.
Thank You

Top comments (17)

rvxlab profile image

The double tilde method is actually something I never thought about, but is worth explaining.

The double tilde «operator» is not as much as an operator as it’s a double bitwise negation.

Let’s cast ’64’ to 64 using this method, so we do

’64’ . First we will evaluate

’64’ . As bitwise operations work on binary, ’64’ is cast to a number. So

64 in binary is 01000000 .

will negate all the bits so it becomes 10111111 , which is -65 since numbers in JavaScript are signed. Now we negate it again, which becomes 01000000 , which is 64 in decimal.

Correction:

I previously stated that 10111111 is -63 , which is incorrect. It’s actually -65 . Sorry about that.

parseFloat()

Текстовая строка, из которой вам надо выделить десятичное число.

Возвращаемое значение

Число с плавающей точкой, полученное из строки. Если первый символ не может быть сконвертирован в число, то возвращается NaN .

Описание

parseFloat — это высокоуровневая функция, не привязанная ни к одному объекту.

parseFloat разбирает текстовую строку, ищет и возвращает из неё десятичное число. Если функция встретит знак, отличный от (+ или -), цифр(0-9), разделительной точки, или показателя степени, она вернёт значение, предшествующее этому знаку, игнорируя все последующие символы . Допускаются позади и впереди идущие пробелы.

Если первый символ нельзя привести к числовому виду, parseFloat вернёт NaN .

С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернёт ли parseFloat значение NaN в качестве результата, можно вызвать функцию isNaN . Если NaN участвует в арифметических операциях, результатом также будет NaN .

parseFloat также может вернуть значение Infinity («бесконечность»). Вы можете использовать функцию isFinite , чтобы определить, является ли результат конечным числом (not Infinity , -Infinity , или NaN ).

How to convert string into float in JavaScript?

I am trying to parse two values from a datagrid. The fields are numeric, and when they have a comma (ex. 554,20), I can’t get the numbers after the comma. I’ve tried parseInt and parseFloat . How can I do this?

Kamil Kiełczewski's user avatar

9 Answers 9

If they’re meant to be separate values, try this:

If they’re meant to be a single value (like in French, where one-half is written 0,5)

Have you ever tried to do this? :p

+(string) will cast string into float.

So in order to solve your problem, you can do something like this:

Replace the comma with a dot.

This will only return 554:

This will return 554.20:

So in the end, you can simply use:

Don’t forget that parseInt() should only be used to parse integers (no floating points). In your case it will only return 554. Additionally, calling parseInt() on a float will not round the number: it will take its floor (closest lower integer).

Extended example to answer Pedro Ferreira’s question from the comments:

If the textfield contains thousands separator dots like in 1.234.567,99 those could be eliminated beforehand with another replace :

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

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