Intl.NumberFormat 返回数字和货币符号通过间距划分的结果

Posted

技术标签:

【中文标题】Intl.NumberFormat 返回数字和货币符号通过间距划分的结果【英文标题】:Intl.NumberFormat returns a result where number and currency symbol are divided through spacing 【发布时间】:2021-05-26 18:52:18 【问题描述】:

我刚刚为我的 vue 应用添加了一个过滤器,它应该将值格式化为欧元(德语格式)的货币。

这是函数:

app.config.globalProperties.$filters = 
    currency(value) 
        return new Intl.NumberFormat(process.env.MIX_LOCALE,  style: 'currency', currency: 'EUR' ).format(value);
    ,

如果我现在做类似的事情

$filters.currency(17.85)

我得到这个结果:17,85 €

如您所见,值和货币符号通过空格分开。这与我们在德国看到的不太一样,我们期待17,85€

由于我在 Intl.NumberFormat 的文档中没有发现任何有用的信息,我想知道 Intl.NumberFormat 是否可以删除空间。

【问题讨论】:

【参考方案1】:

正如您在此 ticket here 中看到的,该问题已为 Intl 所知,并且仍然存在。

你可以做的是this。

【讨论】:

【参考方案2】:

我的第一反应是,为什么不replace()?然后我看到了另一个答案的链接。然后我试了一下,正则表达式不起作用,空间仍然存在。所以这是一个修复错误的有效替换。

app.config.globalProperties.$filters = 
    currency(value) 
        return new Intl.NumberFormat(
           process.env.MIX_LOCALE, 
           style: 'currency', currency: 'EUR')
           .format(value).replace(/\s/g,'');
    

可测试的sn-p

console.log(new Intl.NumberFormat('de-DE',  style: 'currency', currency: 'EUR' ).format(1234567).replace(/\s/g,''));

【讨论】:

以上是关于Intl.NumberFormat 返回数字和货币符号通过间距划分的结果的主要内容,如果未能解决你的问题,请参考以下文章

使用不带货币符号的 Intl.NumberFormat 进行货币格式化

如何确保 Intl.NumberFormat 在使用同一国家/地区时不显示货币代码?

Intl.NumberFormat 没有做数百万正确

Intl.NumberFormat.formatToParts 不是函数

Intl.NumberFormat 中的多个语言环境?

为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?