Как преобразовать строку в float в JavaScript?

Я пытаюсь разобрать два значения из datagrid.
Поля являются числовыми, и когда у них есть запятая (например, 554,20), я не могу получить числа после запятой.
Я пробовал parseInt и parseFloat. Как я могу это сделать?

Ответ 1

Если они предназначены для отдельных значений, попробуйте следующее:

var values = "554,20".split(",")
var v1 = parseFloat(values[0])
var v2 = parseFloat(values[1])

Если они предназначены для одного значения (например, на французском языке, где половина написана 0,5)

var value = parseFloat("554,20".replace(",", "."));

Ответ 2

Вы когда-нибудь пытались это сделать?: Р

var str = '3.8';ie
alert( +(str) + 0.2 );

+ (string) будет лить строку в float.

Handy!

Итак, чтобы решить вашу проблему, вы можете сделать что-то вроде этого:

var floatValue = +(str.replace(/,/,'.'));

Ответ 3

Замените запятую точкой.

Это вернет только 554:

var value = parseFloat("554,20")

Это вернет 554.20:

var value = parseFloat("554.20")

Поэтому, в конце концов, вы можете просто использовать:

var fValue = parseFloat(document.getElementById("textfield").value.replace(",","."))

Не забывайте, что parseInt() следует использовать только для синтаксического анализа целых чисел (без плавающих точек). В вашем случае он вернется только 554. Кроме того, вызов parseInt() в поплавке не будет округлять число: он займет свой пол (ближайшее нижнее целое число).


Расширенный пример ответа на вопрос Педро Феррейры из комментариев:

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

var fValue = parseFloat(document.getElementById("textfield").value.replace(/\./g,"").replace(",","."))

Ответ 4

Если вы расширяете объект String следующим образом.

String.prototype.float = function() { 
  return parseFloat(this.replace(',', '.')); 
}

.. вы можете запускать его следующим образом

"554,20".float()
> 554.20

работает также с точкой

"554.20".float()
> 554.20

typeof "554,20".float()
> "number"

Ответ 5

@GusDeCool или кто-либо другой, пытающийся заменить более тысячи разделителей, один из способов сделать это глобальное выражение regex: /foo/g. Просто помните, что . является метасимволом, поэтому вам нужно сбежать от него или положить его в скобки (\. или [.]). Здесь один из вариантов:

var str = '6.000.000';
str.replace(/[.]/g,",");

Ответ 6

Вы можете использовать эту функцию. Он заменит запятые на "", а затем будет parseFlaot значение, и после этого он снова изменит значения запятых.

function convertToFloat(val) {
        if (val != '') {
            if (val.indexOf(',') !== -1)
                val.replace(',', '');
            val = parseFloat(val);
            while (/(\d+)(\d{3})/.test(val.toString())) {
                val = val.toString().replace(/(\d+)(\d{3})/, '$1' + ',' + '$2');
            }
        }
        return val;
    }

Ответ 7

У меня была та же проблема, за исключением того, что я заранее не знал, что такое разделители тысяч и разделитель десятичных чисел. В итоге я написал библиотеку, чтобы сделать это. Если вас это интересует, вот оно: https://github.com/GuillaumeLeclerc/number-parsing