Можно ли преобразовать строку локали в десятичное число с тысячами разделителей в JS? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь найти способ преобразовать строку, которая была выведена Number.toLocaleString (), в число с плавающей запятой с разделителями тысяч и десятичных разрядов.Проблема в том, что я не могу найти способ сделать это для любой локали: китайские числа имеют разделитель каждые 4 цифры, Индия начинается с 3, а затем каждые 2 цифры, немецкие разделители в точности противоположны английским, у французов есть пробелы длятысячи и т.д ...

Это в основном то, что я хочу:

Indian : '10,00,00,123' => '100000.123'
French : '123 456,789' => '123456.789'

Есть ли библиотека, которая может сделать это?У меня есть локаль перед анализом с

navigator.language

, если это помогает

Заранее спасибо

ОБНОВЛЕНИЕ: Этоэто то, что я придумал, и он отлично работает для арабских цифр:

let localeString = '123,45,67,89.57982';

console.log(reformat(localeString));

function reformat(str) {
    let rawNumber;
    let decimalIndex;
    let charToRemove = 0;
    for (let i = 0; i < str.length; i++) {
        if (!isNaN(str[i])) {
            //concatenating numbers
            rawNumber = parseInt(`${rawNumber ? rawNumber : ''}${str[i]}`);
        } else {
            decimalIndex = i;
            charToRemove++;
        }
    }

    return format(rawNumber, decimalIndex, charToRemove);
}

function format(number, decimalIndex, charToRemove) {
    if (decimalIndex) {
        // Adding decimal to the right place
        return number / Math.pow(10, number.toString().length - decimalIndex + charToRemove - 1);
    } else {
        return number;
    }
}

РЕДАКТИРОВАТЬ: он не работает так, как задумано, поскольку нет способа узнать, является ли разделитель десятичным или тысячным (нетспособ дифференциации целых чисел с помощью тысяч разделителей и десятичного числа)

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Пройдите через строку по одному символу за раз, проверьте, является ли символ числом, добавьте его в строку и вставьте необходимые разделители полей через заданные интервалы (возможно, счетчик 3 для запятых?)

0 голосов
/ 15 октября 2018

Может быть, этот инструмент поможет вам! accounting.js

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

...