Формат валюты без использования toLocaleString () или Intl.NumberFormat () - PullRequest
0 голосов
/ 15 апреля 2019

Я знаю, что подобный вопрос задавался несколько раз тише.Разница в том, что я не могу использовать решение, которое использует .toLocalString () или замечательный Intl.NumberFormat ().

Вместо этого я должен создать форматтер с нуля, и я начал делать это с этой частьюкода:

var currCurrency = "EUR";

function Format__Currency(val, currency) {

    switch (currency) {
        case 'EUR':
            currencyFormat = '0,00';
            val = val.replace('.', ',');
            val = currencyFormat.replace('0,00', val);
            break;
        case 'CHF':
            currencyFormat = '0.00';
            val = val.replace(',', '.');
            val = currencyFormat.replace('0.00', val);
            break;
        case 'USD':
            currencyFormat = '0.00';
            val = currencyFormat.replace('0.00', val);
            break;
        default:
            throw new Error('Unknown currency format');
            break;
    }
    return val;
}


var price = Format__Currency("1929.90", "EUR")
$("#result").html(price);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<div id="result"> - </div>

«Ручная версия» подходит мне, поскольку мне нужно только поддерживать 4 или 5 валют, и я выясню, какой у них должен быть формат.

Моя проблема в том, что в настоящее время я могу изменить только делитель для десятичных разрядов.Но есть и разные тысячи разделителей.например, 1920,90 для долларов США, 1,920,90 для евро или 1 920,90 для швейцарских франков.

Как ЭТО может быть решено?

PS: Если недовольные избиратели, пожалуйста, скажите мне, что не так с этим вопросом?

1 Ответ

1 голос
/ 15 апреля 2019
function numberToReal(numero) {
    var numero = numero.toFixed(2).split('.');
    numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.');
    return numero.join(',');
}

var x = numberToReal(9999000.33);
console.log(x);

var y = numberToReal(100000);
console.log(y);

var z = numberToReal(10.50);
console.log(z);

Прежде всего, я получаю число с двумя десятичными точками и разделю его на две части (до и после)

var numero = numero.toFixed(2).split('.');

Таким образом, во второй строке я могу работать с числом, исключая десятичную точку (numero[0])

numero[0] = "R$ " + numero[0].split(/(?=(?:...)*$)/).join('.');

Так что я возвращаю форматированное число, добавляя с десятичной точкой, используя запятую (в Бразилии мы используем commo для обозначения десятичного знака)

return numero.join(',');
...