【问题标题】:Currency Format without using toLocaleString() or Intl.NumberFormat()不使用 toLocaleString() 或 Intl.NumberFormat() 的货币格式
【发布时间】:2019-04-15 15:17:05
【问题描述】:

我知道类似的问题已经被问过几次了。 这里的区别是,我不能使用使用 .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 种货币,我会找出它们的格式。

我的问题是目前我只能更改小数位的分隔符。但是也有不同的千位分隔符。例如,美元 1,920.90,欧元 1.920,90 或瑞士法郎 1'920.90。

如何解决?

PS:如果投反对票的可以告诉我这个问题有什么问题?

【问题讨论】:

  • 请解释你为什么cannot use a solution that uses .toLocalString() or the wonderful Intl.NumberFormat().
  • 因为这些值目前还没有从后端传递到前端。我只知道货币,但我不知道地区(de-DE、de-CH、en-US ...)。而且在我的情况下,位于德国的用户很可能在他的应用程序中使用美元计算。或者瑞士人使用欧元。
  • 这并不能解释为什么您不能使用标准方法将数字格式化为货币。
  • 嗯,我不知道如何动态地做到这一点?
  • 不完全正确,欧元的格式取决于地区/国家 - 例如,爱尔兰使用正常的 1,920.90,德国使用混乱的 1.920,90。正如@Archer 所说,如果问题不是浏览器兼容性,我不明白为什么不能使用上述方法。您的语言环境来自navigator.language

标签: javascript jquery currency currency-formatting


【解决方案1】:
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);

首先,我得到带 2 个小数点的数字,然后分成两个位置的数组(点之前和之后)

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

这样在第二行我可以处理不包括小数点的数字(numero[0])

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

所以我返回格式化的数字,使用逗号加上小数点(在巴西,我们使用 commo 来表示小数位)

return numero.join(',');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-23
    • 2019-06-29
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2012-01-22
    相关资源
    最近更新 更多