Подтвердить что ты не робот

Преобразование String с точкой или запятой в качестве десятичного разделителя в число в JavaScript

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

'1,2'
'110 000,23'
'100 1.23'

Как преобразовать их в число с плавающей точкой в ​​браузере с помощью JavaScript?

Используются jQuery и пользовательский интерфейс jQuery. Number(string) возвращает NaN и parseFloat() останавливается на первом пробеле или запятой.

4b9b3361

Ответ 1

Сначала выполните замену:

parseFloat(str.replace(',','.').replace(' ',''))

Ответ 2

Идеальное решение

accounting.js - это крошечная библиотека JavaScript для форматирования чисел, денег и валюты.

Проверить это для ref

Ответ 3

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

var str = "110 000,23";
var num = parseFloat(str.replace(/\s/g, "").replace(",", "."));
console.log(num);

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

Ответ 4

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

function parsePotentiallyGroupedFloat(stringValue) {
    stringValue = stringValue.trim();
    var result = stringValue.replace(/[^0-9]/g, '');
    if (/[,\.]\d{2}$/.test(stringValue)) {
        result = result.replace(/(\d{2})$/, '.$1');
    }
    return parseFloat(result);
}

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

Стоит отметить, что я нацелил это специально на валюту и, как таковой, он не принимает ни десятичных знаков, ни ровно двух. Очень трудно быть уверенным в том, была ли обнаружена первая потенциальная десятичная точка десятичной точки или символ группировки цифр (например, 1.542 может быть 1542), если вы не знаете специфику текущего языка, но это должно быть легко достаточно, чтобы адаптировать это к вашему конкретному варианту использования, изменив \d{2}$ на то, что будет соответствующим образом соответствовать тому, что вы ожидаете после десятичной точки.

Ответ 5

Как насчет:

parseFloat(str.replace(' ', '').replace('.', '').replace(',', '.'));

Ответ 6

Это лучшее решение

http://numeraljs.com/

numeral().unformat('0.02'); = 0.02

Ответ 7

Все другие решения требуют, чтобы вы знали формат заранее. Мне нужно было определить (!) Формат в каждом случае, и это то, что я получаю.

function detectFloat(source) {
    let float = accounting.unformat(source);
    let posComma = source.indexOf(',');
    if (posComma > -1) {
        let posDot = source.indexOf('.');
        if (posDot > -1 && posComma > posDot) {
            let germanFloat = accounting.unformat(source, ',');
            if (Math.abs(germanFloat) > Math.abs(float)) {
                float = germanFloat;
            }
        } else {
            // source = source.replace(/,/g, '.');
            float = accounting.unformat(source, ',');
        }
    }
    return float;
}

Это было протестировано в следующих случаях:

        const cases = {
            "0": 0,
            "10.12": 10.12,
            "222.20": 222.20,
            "-222.20": -222.20,
            "+222,20": 222.20,
            "-222,20": -222.20,
            "-2.222,20": -2222.20,
            "-11.111,20": -11111.20,
        };

Предложения приветствуются.

Ответ 8

От номера до строки валюты легко через Number.prototype.toLocaleString. Однако обратная ситуация, по-видимому, является общей проблемой. Десятичный разделитель и десятичная точка не могут быть получены в стандарте JS.

В этом конкретном вопросе разделитель тысяч представляет собой пробел " ", но во многих случаях это может быть период ".", а десятичная точка может быть запятой ",". Например, в 1 000 000,00 или 1.000.000,00. Затем я преобразую его в правильное число с плавающей запятой.

var price = "1 000.000,99",
    value = +price.replace(/(\.|\s)|(\,)/g,(m,p1,p2) => p1 ? "" : ".");
console.log(value);