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

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

7 ответов


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

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

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

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

вы когда-нибудь пробовали это делать? : p

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

+(строка) приведет строку в float.

удобно!

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

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

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

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

var value = parseFloat("554,20")

это вернет 554.20:

var value = parseFloat("554.20")

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

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

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


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

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

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

Если вы расширяете объект String, как это..

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

.. вы можете запустить его так

"554,20".float()
> 554.20

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

"554.20".float()
> 554.20

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

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

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

вы можете использовать эту функцию. Он заменит запятые на' ', а затем он будет 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})/, '' + ',' + '');
            }
        }
        return val;
    }

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